我在我的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
答案 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;
}
}