比如我要从 0-9 和 abc......xyz 中生成不重复的 10 位随机数我现在要一次性生成10W个随机数(如果没有10W个不重复的就有多少生成多少), 这样的话就要对算法的要求有点高了,主要是速度要快,这样的算法怎样实现好?麻烦高手们可以指点一点,具体代码分享一下,谢谢!

解决方案 »

  1.   

    随机数
    Random rand = new Random(Guid.NewGuid().GetHashCode());
    rand .Next(最小值,最大值)
    Random rnd = new Random(DateTime.Now.Millisecond);Enumerable.Range(1, 100).OrderBy(Guid.NewGuid());   
     
    A...Z .ToCharArray随机获取0-25,取数组字符
      

  2.   

    补充一下,从 0-9 和 abc......xyz 中生成不重复的 10 位随机数
    也可以是0-5和abc...hij  这个也是用户可以自己选 的,
    看清楚问题,是不重复的
      

  3.   

     C#的解题思路(1):不重复随机数的产生问题    
    关于不重复随机数生成的问题我在七八年前就遇到过,四五年前的时候曾经做过总结,最近看到有人在讨论这个问题,于是就又重新捡起这个话题了。现在捡起这个话题的目的不是想再简单介绍可能的几种算法,而是从思路上去说明,并且将情况慢慢复杂化,想要说明的是程序员们(不限于.NET程序员)不要用固定的思路去解决问题,可能同样的要求在不同的场合下会有不同的做法。明白了思路才能真正做到以不变应万变,学会一两个控件的用法或者多指导一两个API并不算什么本领,能够在遇到以前没有碰到过的问题时迅速简化解决思路才是本领,另一种本领就是遇到错误时如何快速根据经验定位错误产生原因的本领。
      

  4.   

    用长度为10或者更大的数组存储不相重复的值(这个可以用其他工具做,如Exel,SQL),然后对这些数组元素进行堆积选择,已选择的作下标记,下一个随机数就在未标记的元素中选择。想来想去,就是觉得这方法笨了点,做起来也有点累,写出来执行效率不够高
      

  5.   


    10位随机数,每位可能是0-9或a-z
    有这么多种可能
    3656158440062976
    你才只要10W碰撞几率为365亿分之一所以你就随机出来一个放到Hash表里
    再随机出来一个看表里有没有,没有就放进去然后就完事了。有什么需要讨论的吗?