2017-07-31 73 views
0

我在我的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,2,1,3}組中有3個不同的項目(1,2,3)和2個唯一的(非重複的)項目(2和3)? –

+0

@AkiSuihkonen:我想對不同的數字進行操作 – NGB

+1

使用一個位數組。您的範圍需要12.5MB。 –

回答

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; 
    } 
}