给定一个由真/假值组成的数组,选择一个随机的索引具有真值的最有效算法是什么。
一个简单的草图算法如下:
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
有没有人能想出一个更快的算法?也许有一种方法可以只遍历列表一次,即使一开始不知道真实元素的数量?