获取随机生成器

时间:2017-07-31 06:05:58

标签: algorithm python-2.7 random

我在我的python代码中使用随机生成器。我想得到在一个巨大的范围内生成的独特随机数的百分比,如随机(0:10 ^ 8)。我需要生成10 ^ 12个数字在空间复杂度方面,什么可能是有效的算法? 代码类似于:

import random
dif = {}
for i in range(0,1000):
    rannum = random.randint(0,50)
    dif[rannum] = "True"
dif_len = len(dif)
print dif_len
per = float(dif_len)/50
print per

1 个答案:

答案 0 :(得分:1)

您必须跟踪生成器生成的每个数字,或者无法知道之前是否看到过某个新数字。最好的方法是什么?这取决于你要检查的数量。对于小N,请使用HashSet。在大量的N处,使用位图变得更有效。

对于小N ......

public class Accumulator {
   private int uniqueNumbers = 0;
   private int totalAccumulated = 0;
   private HashSet<int> set = new HashSet<int>();

   public void Add(int i) {
     if (!set.Contains(i)) {
       set.Add(i);
       uniqueNumbers++;
     }

     totalAccumulated++;

   }

   public double PercentUnique() {
     return 100.0 * uniqueNumbers / totalAccumulated;
   }
}