【发布时间】:2009-12-03 15:26:20
【问题描述】:
给定一组真/假值,随机选择具有真值的索引的最有效算法是什么。
一个简单的算法是
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 所在的位置。我通过二进制搜索解决了这个问题。请举一些使用这些的例子。
-
近乎重复:stackoverflow.com/questions/1133942/…。但是,在那个问题中,数组的大小为 52,这可能会影响答案(例如,您很确定大小为 52 的数组适合内存,而这里的
a可能不适合)。