algorithm - 获取随机生成器生成的百分比唯一数字

标签 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

最佳答案

您必须跟踪生成器生成的每个数字,否则无法知道以前是否见过某个新数字。最好的方法是什么?这取决于您要检查多少个数字。对于小 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;
   }
}

关于algorithm - 获取随机生成器生成的百分比唯一数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45408504/

相关文章:

android - 这有多容易实现?创建 % 至 100 bar

python-2.7 - Python进程被杀死

python - pandas 按切片分割数据框列

python - 通过 beautifulsoup 获取文本而不使用 str.text.strip()

algorithm - 对停顿最少的垃圾回收算法感兴趣,愿意牺牲空间

python - 为什么 numpy.random 和 multiprocessing 玩起来不好?

javascript - 从一组允许的字符生成随机字符串的最佳方法是什么?

java - 具有大量元素的数组仅对最大的 n 个元素进行排序

algorithm - 计算 3 个数字模 m 的乘积

Php 获得独特的不同输出