我有一个长度为N的正整数的随机访问列表,我有一个变量MAX,我知道我的列表中的最大数字是M(数组中可能没有M,但不能超过M) )。算法是我随机访问我的列表,在每次访问时我写的值存在于变量MAX中,当且仅当它包含的值大于MAX时。
现在我想知道如何使用此算法计算对变量MAX的预期写入次数?
希望这个例子更清楚:
List: 2 - 5 - 3 - 1 - 9
Read 2 => Max = 2 (1 write)
Read 5 => Max = 5 (2 writes)
Read 3 => Max = 5 (2 writes) (do not write)
Read 1 => Max = 5 (2 writes) (do not write)
Read 9 => Max = 9 (3 writes)
答案 0 :(得分:3)
分布均匀时,n
个数字n
的最大数量1/n
最大的概率为1 + 1/2 + 1/3 + 1/4 + 1/5 + .. + 1/N
。
这意味着预期的写入次数为ln N
,大约为{{1}}(请参阅:harmonic series)
答案 1 :(得分:0)
根据您的定义,预期的写入次数会有所不同,具体取决于列表的顺序。由于它没有排序,如果可能达到N(列表中的元素数量),如果列表被排序/排序,则会发生这种情况。您将不得不遍历所有元素以检查您的数字是否是最大值。 想象一下,最大数字是最后一个元素。让我们说你扫描列表的一半,找到最大值,然后你不需要任何写入。但是你不知道列表的分布情况。
如果列表是随机的,你可能不知道,除非你尝试列表中的所有元素。然而,如果您知道上限/最大值,那么一旦您找到该数字就不再需要扫描了。