在数组中找到最大值时写入的预期数量是多少?

时间:2011-10-21 18:35:14

标签: algorithm

我有一个长度为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) 

2 个答案:

答案 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(列表中的元素数量),如果列表被排序/排序,则会发生这种情况。您将不得不遍历所有元素以检查您的数字是否是最大值。 想象一下,最大数字是最后一个元素。让我们说你扫描列表的一半,找到最大值,然后你不需要任何写入。但是你不知道列表的分布情况。

如果列表是随机的,你可能不知道,除非你尝试列表中的所有元素。然而,如果您知道上限/最大值,那么一旦您找到该数字就不再需要扫描了。