给定一个真/假值数组,选择具有随机真值的索引的最有效算法是什么.
草图简单的算法是
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
Run Code Online (Sandbox Code Playgroud)
任何人都可以提出更快的算法吗?即使最初不知道真元素的数量,也许有一种方法只能遍历列表一次?