最大值多久更新一次?

时间:2014-02-21 04:55:55

标签: algorithm analysis

鉴于以下算法:

Algorithm Find-Max(Array, size)
Max = -INFINITY
for k:= 1 to n do
    if(A[k] > Max-sf) Then
         Max-sf:=A[k]
    end if

问题是变量max更新的平均时间是多少?

我正在练习算法分析,下面是我的想法,但我不确定,所以我想征求意见。

设T(n)为每次调用find-Max时的比较次数,其中size = n。

T(n) = T(n-1) + 1/n

其中1 / n是最大数字在索引n处的概率。因此,

T(n-1) = T(n-2) + 1/(n-1)
T(n-2) = T(n-3) + 1/(n-2)

通过伸缩,

T(n) = 1/n + 1/(n-1)+ 1/(n-2) + .... + 1

,这是谐波系列。因此,变量Max-sf更新的平均时间是log(n))

这就是我证明它的方式。

所以,我想问3个问题: (1)上述证明是否正确? (2)有没有办法获得比较次数的精确值? (3)假设我们使用分而治之的方法,使用类似的思路作为合并排序而不是扫描数组,更新的数量是否仍然相同?

1 个答案:

答案 0 :(得分:0)

1)我不确定你的证据,但我发现this one是最正式和最有说服力的证据。

2)确切的比较数似乎是固定的。你总是在循环中做比较。

3)关于分而治之的选项,它不能比最坏情况下的更新数量(n)更好,因为它的行为如下:

T(n) = 2T(n/2) + 1

这导致T(2 ^ n)= 2 * 2 ^ n-1,这意味着Theta(n)复杂度。