2012-06-30 7 views
2

我想要實現兩件事: 1)找出樂透結果和存儲到哈希表中的配對號碼。 2)通過樂透循環產生有效的方式,計數頻率並將頻率結果添加到配對號碼哈希表。高效的方法來計算和查找事件(樂透分析)

我想建立一個程序,能夠告訴我對數的頻率。

For a list/array of number , example : 
    4, 12, 20 , 32, 48, 50 
    2, 22, 20 , 32, 38, 40 
    4, 12, 20 , 25, 33, 44 
    1, 11, 20 , 31, 48, 50 
    1, 12, 20 , 36, 47, 51 

結果欲:

Pair Number  |  Repeat Times 
    4, 12       2 
    4, 20       2 
    12, 20       3 
     .       . 
     .       . 

列出所有可能的對數自動化
的數據沒有必要在清單/陣列。 爲便於分組而存儲數據的任何其他建議?地圖?

任何有效的方法來分組和重複循環以外的重複次數?

欣賞任何建議和建議。

+0

目前尚不清楚「group」和「number」之間的區別在哪裏。您的輸入實際上是列表的列表,還是隻有30個數字?請澄清。 –

+0

任何對號碼在列表/地圖/數組中出現超過1次。 –

+0

我還沒有決定將數據存儲在列表/數組/地圖中。任何建議? –

回答

0

爲了清楚起見,假設您以n集合c元素(或本例中的數字)開頭。您的問題是要找出所有集合中所有大小爲2的唯一子集的聚合頻率(即跨所有集合)。

爲此,循環遍歷每個集合並考慮該集合中的每對元素並將其頻率保存在散列表中。當你考慮一對時,如果它已經存在於散列表中,則將其值加1;否則,將其添加到值爲1的散列表中。您的代碼將類似於下面的僞代碼。

hashtable h 
for s in sets: 
    for i in s.size(): 
     for j > i in s.size(): 
      pair p = (s[i],s[j]) 
      if h.exists(p): 
       h[p]++ 
      else: 
       h.put(p,1) 

由於這種方法具有的nc,和c,該算法在O(nc^2)時間進行限制的三重嵌套循環。

考慮一個極端情況,其中每個可能的大小爲2的子集都是唯一的。在這種情況下,您的頻率表將由n × c choose 2元素組成。在大O符號中,該值減小到O(nc^2)。因此,最好的解決方案並不比O(nc^2)好,這正好是上述算法的速度。

+0

嗨,謝謝你的迴應。樂透結果存儲列表可能不起作用,因爲兩個不同的畫可能會有相同的結果。如果首先沒有預先定義配對號碼,如何從給定的樂透列表中找到配對號碼? –

+0

@JasonHue如果樂透挑選可以包含重複值,請使用列表而不是集合。邏輯是相同的。 – cheeken

+0

如何從給定的樂透列表中找到配對號碼?對數字基於抽籤結果而不是預定義。 –