【问题标题】:Get percentage unique numbers generated by random generator获取随机生成器生成的百分比唯一数字
【发布时间】:2017-07-31 06:05:57
【问题描述】:

我在我的 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,2,1,3 } 的集合中,有 3 个不同的项目 (1,2,3) 和 2 个唯一(非重复)项目(2 和 3)?
  • @AkiSuihkonen : 我想对不同的数字进行操作
  • 使用位数组。您的范围需要 12.5MB。

标签: algorithm python-2.7 random


【解决方案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;
   }
}

【讨论】:

    猜你喜欢
    • 2018-05-03
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    相关资源
    最近更新 更多