給定一個真/假值數組,什麼是最有效的算法來隨機選擇一個真值的索引。快速隨機選擇算法
草圖簡單的算法是
a <- the array
c <- 0
for i in a:
if a[i] is true: c++
e <- random number in (0, c-1)
j <- 0
for i in e:
while j is false: j++
return j
誰能想出一個更快的算法?也許有一種方法只能遍歷列表中的一次,即使最初不知道真正元素的數量?
只是想知道,在哪些應用程序中使用了這些類型的算法?前一段時間,我遇到了類似的問題,給定了一個無限大小的數組,前n個地方都填滿1,剩下的都是零。現在這個數組被賦予給一個新用戶(不知道n的值)。現在找出一個算法來標記最後1位的地方。這我通過二分查找解決。請給出一些使用它們的例子。 – avd 2009-12-03 15:33:45
近似重複:http://stackoverflow.com/questions/1133942/what-is-the-most-efficient-way-to-pick-a-random-card-from-a-deck-when-some-cards。在這個問題中,數組大小爲52,但是,這可能會影響答案(例如,您非常確定52號文件適合內存,而'a'可能不適合)。 – 2009-12-03 15:40:33