一个关于Random算法的问题
2015-11-12 18:54
323 查看
指定范围数字,生成随机序列,数字不连续;例如:范围【1-5】 输入 1 3 5 2 4
下面分享两种算法:
算法2:RmNum<RmNext 下面这种算法,如果RmNum和RmNext趋近的时候就会出现效率问题(甚至计算不出来)
当RmNum=RmNext 时候,两种算法都会计算很长时间,甚至计算不出来,当时试着用hashtable,hashtable 可以存储但是是无序的,于是就用了Dictionary和list。
下面是调用的方法(直接粘过去是能用的):
指定范围数字,生成随机序列,数字不连续,我这个只是随机把一种组合打印出来,如果把所有组合都打印出来该怎么办???范围【1-5】 1 5 2 然后是不是就死循环了?
求大神解惑!!!
下面分享两种算法:
算法1: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; }
算法2: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和list。
下面是调用的方法(直接粘过去是能用的):
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();
指定范围数字,生成随机序列,数字不连续,我这个只是随机把一种组合打印出来,如果把所有组合都打印出来该怎么办???范围【1-5】 1 5 2 然后是不是就死循环了?
求大神解惑!!!
相关文章推荐
- JQuery的父、子、兄弟节点查找,节点的子节点循环
- 实验二 作业调度模拟实验
- 大道至简感想终结篇
- Java匿名内部类
- NDK-JNI官方中文资料
- UItextField 一键删除小按钮
- java初学第一天之:安装及记事本编程
- Python基础之【第三篇】
- ofbiz的部署及安装问题解决办法
- python中的高阶函数map(),reduce(),filter()的区别
- 算法题——喝汽水问题
- MarkdownPad 使用 MathJax
- 11.11实验二作业调度
- 01《需求模式——软件建模与分析》
- C语言(C++语言)中##(两个井号)和#(一个井号)用法
- 给ViewPage导航栏加滑动动画
- 实验二 作业调度模拟程序
- 使用 JavaScript 实现栈
- Handler机制
- ssh远程登录主机sudo执行命令