一个关于Random算法的问题
指定范围数字,生成随机序列,数字不连续;例如:范围【1-5】 输入 1 3 5 2 4
下面分享两种算法:
算法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 然后是不是就死循环了?
求大神解惑!!!
一个关于Random算法的问题的更多相关文章
- 一个UUID生成算法的C语言实现 --- WIN32版本 .
一个UUID生成算法的C语言实现——WIN32版本 cheungmine 2007-9-16 根据定义,UUID(Universally Unique IDentifier,也称GUID)在时 ...
- 一个简单的算法,定义一个长度为n的数组,随机顺序存储1至n的的全部正整数,不重复。
前些天看到.net笔试习题集上的一道小题,要求将1至100内的正整数随机填充到一个长度为100的数组,求一个简单的算法. 今天有空写了一下.代码如下,注释比较详细: using System; usi ...
- ZeroMQ接口函数之 :zmq_z85_decode – 从一个用Z85算法生成的文本中解析出二进制密码
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_z85_decode zmq_z85_decode(3) ØMQ Manual - ØMQ/4.1 ...
- 一个由IsPrime算法引发的细节问题
//******************************* // // 2014年9月18日星期四,于宿舍撰写 // 作者:夏华林 // //******************* ...
- 手动实现一个虚拟DOM算法
发现一个好文:<深度剖析:如何实现一个 Virtual DOM 算法> 源码 文章写得非常详细,仔细看了一遍代码,加了一些注释.其实还有有一些地方看的不是很懂(毕竟我菜qaq 先码 有时间 ...
- 自己实现一个一致性 Hash 算法
前言 在前文分布式理论(八)-- Consistent Hash(一致性哈希算法)中,我们讨论了一致性 hash 算法的原理,并说了,我们会自己写一个简单的算法.今天就来写一个. 普通 hash 的结 ...
- 一个UUID生成算法的C语言实现——WIN32版本
源: 一个UUID生成算法的C语言实现——WIN32版本
- 一个基于RSA算法的Java数字签名例子
原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性 ...
- 能够满足这样要求的哈希算法有很多,其中比较著名并且应用广泛的一个哈希算法,那就是MurmurHash 算法。尽管这个哈希算法在 2008 年才被发明出来,但现在它已经广泛应用到 Redis、MemCache、Cassandra、HBase、Lucene 等众多著名的软件中。
能够满足这样要求的哈希算法有很多,其中比较著名并且应用广泛的一个哈希算法,那就是MurmurHash 算法.尽管这个哈希算法在 2008 年才被发明出来,但现在它已经广泛应用到 Redis.MemCa ...
随机推荐
- File类基础
File类的作用: Java的io包中定义了File类,用于对文件或文件夹的管理操作. File类只能够用于表示文件或文件夹的信息(属性)和对该文件或文件夹的删除创建操作 (不能对内容进行访问) 通过 ...
- 如何在UMG蓝图中动态创建控件
把控件作为UObject即可,在c++中则使用NewObject函数
- VBA 获取Sheet最大行
compared all possibilities with a long test sheet: 0,140625 sec for lastrow = calcws.Cells.Find(&quo ...
- react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)
react学习小结 本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...
- VS2010 OpenCV 2.4.6 配置 (Win7 32位)
1.下载安装OpenCV 下载OpenCV-2.4.6.0 (文件大小 291M),下载地址如下,下载完成后解压缩到路径%OpenCV%下,本文%OpenCV%=E:\图像处理与计算机视觉. http ...
- Android入门(九):CheckBox多选清单和ScrollView滚动条
字符串资源文件strings.xml: <resources> <string name="hello">主类main</string> < ...
- easyUI下拉列表三级联动
首先是先想好数据库的搭建,通过地区id,地区名称,上级地区id就可以实现,所有省市区的数据 例如: DAO层 service层 Servlet 页面 <!DOCTYPE html> < ...
- [转]Oracle Hidden Parameter:_allow_resetlogs_corruption
本文转自eygle博客,原文地址:http://www.eygle.com/archives/2005/10/oracle_hidden_allow_resetlogs_corruption.html ...
- 重置dns
flusdns
- MySQL 事务
MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成 ...