首页 > 编程语言 > 详细

一个关于Random算法的问题

时间:2015-11-12 20:03:49      阅读:384      评论:0      收藏:0      [点我收藏+]

指定范围数字 生成随机序列 数字不连续

例如:范围【1-5】  输入 1 3 5 2 4

           Stopwatch sp = new Stopwatch();
            sp.Start();//开始计时
            foreach (var item in GetRandomList(9999, 10000))
            {
                Console.WriteLine(string.Format("{0}", item.Value.ToString()));
            }
            sp.Stop();
            Console.WriteLine(String.Format("耗时{0}", sp.ElapsedMilliseconds));
            Console.Read();

  

RmNum<RmNext 下面这种算法计算是无压力的
        /// <summary>
        /// 指定范围数字 生成随机序列 数字不连续
        /// </summary>
        /// <param name="RmNum">随机序列个数</param>
        /// <param name="RmNext">范围</param>
        /// <returns></returns>
        public static Dictionary<int, int> GetRandomList(int RmNum, int RmNext)
        {
            Dictionary<int, int> dictionary = new Dictionary<int, int>();
            Random rm = new Random();
            for (int i = 0; dictionary.Count < RmNum; i++)
            {
                int nValue = rm.Next(1, RmNext);
                if (i == 0)
                {
                    dictionary.Add(i, nValue);
                }
                if (!dictionary.ContainsValue(nValue))
                {
                    ArrayList arrayList = new ArrayList();
                    foreach (var item in dictionary)
                    {
                        arrayList.Add(item.Value);
                    }
                    if (dictionary.Count > 0)
                    {
                        if (Math.Abs(Convert.ToInt32(arrayList[arrayList.Count - 1]) - Convert.ToInt32(nValue)) > 1)
                        {
                            dictionary.Add(i, nValue);
                        }
                    }
                }
            }
            return dictionary;
        }

  

RmNum<RmNext 下面这种算法,如果RmNum和RmNext趋近的时候就会出现效率问题
    /// <summary>
        /// 指定范围数字 生成随机序列 数字不连续
        /// </summary>
        /// <param name="RmNum">随机序列个数</param>
        /// <param name="RmNext">范围</param>
        /// <returns></returns>
        public static List<int> GetRandomListNew(int RmNum, int RmNext)
        {
            int[] array = new int[RmNext];
            List<int> List = new List<int>();
            for (int i = 0; i <= array.Length - 1; i++)
            {
                array[i] = i + 1;
                if (i == 0)
                {
                    List.Add(array[i]);
                }
            }
            for (int i = 0; List.Count < RmNum; i++)
            {
                if (!List.Contains(List[List.Count - 1]))
                {
                    if (List.Count > 0)
                    {
                        if (Math.Abs(Convert.ToInt32(List[List.Count - 1]) - Convert.ToInt32(List[List.Count])) > 1)
                        {
                            List.Add(List[List.Count - 1]);
                        }
                    }
                }
            }
            return List;
        }

  当RmNum=RmNext 时候两种算法都会计算很长时间,甚至计算不出来,当时试着用hashtable,hashtable 可以存储但是是无序的,于是就用了Dictionary。

     指定范围数字,生成随机序列,数字不连续,我这个只是随机把一种组合打印出来,如果把所有组合都打印出来该怎么办???范围【1-5】   1 5 2 然后是不是就死循环了?

    求大神解惑!!!

  

一个关于Random算法的问题

原文:http://www.cnblogs.com/viaiu/p/4959897.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!