一个关于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 ...
随机推荐
- Delphi中滚动文字的应用
1.添加一个Timer控件,Interval属性设置为20. 2.添加一个Label控件,Name为labMessage. 3.在Timer的OnTimer事件添加如下代码: procedure TF ...
- 传智播客DotNet面试题
技术类面试.笔试题汇总(整理者:杨中科,部分内容从互联网中整理而来) 注:标明*的问题属于选择性掌握的内容,能掌握更好,没掌握也没关系. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化 ...
- 2016"百度之星" - 资格赛(Astar Round1)
逆元 1001 Problem A 求前缀哈希和逆元 #include <bits/stdc++.h> typedef long long ll; const int MOD = 9973 ...
- Maven2 根据项目生成模版项目,并使用该模板批量创建工程。
Maven 3 创建自己的模版,并使用模版创建工程 1.建立样板Maven工程: myModel 2.进入 myModel 工程根目录执行:mvn archetype:create-from-proj ...
- PHP mysql基础操作
mysql连接操作 //建立连接$con = mysql_connect('localhost', 'root', '123456');//判断是否连接成功if($con){ die('连接失败!'. ...
- BZOJ3069: [Pa2011]Hard Choice 艰难的选择
Description Byteasar是一个很纠结的人.每次他经过Bytetown的时候都知道有至少2条不同的路径可以选择,这导致他必须花很长时间来决定走哪条路.Byteasar最近听说了Bytet ...
- 解决使用osgModeling的Loft生成管子时的bug(续)
今天发现有一些情况下, 还是无法生成管道, 排查了一天发现问题好像出在管线头两个点的x完全相同时, 会出这个问题. 看了半天的Loft源码, 发现问题出在Loft::considerBasisX函 ...
- Java_动态重新加载Class机制
Java动态重新加载Class 项目中使用到了动态重新加载Class的机制,作用是让一些代码上线之前可以在线上环境测试一下,当然,这是非常不好的测试机制,我刚来的时候也为这种机制感到惊讶—怎么可以在线 ...
- USACO翻译:USACO 2014 US Open 三题
USACO 2014 US Open 一.题目概览 中文题目名称 牧场装饰 里程表 牛像展览 英文题目名称 decorate odometer fairphoto 可执行文件名 decorate od ...
- HTML中行内元素与块级元素的区别:
HTML中行内元素与块级元素的区别:在标准文档流里面,块级元素具有以下特点: ①总是在新行上开始,占据一整行:②高度,行高以及外边距和内边距都可控制:③宽带始终是与浏览器宽度一样,与内容无关:④它可以 ...