TADM 2-45:tmp=A[i] 的预期执行次数是多少?

mel*_*oli 5 algorithm big-o

我正在尝试解决《算法设计手册》中的以下练习 (2-45):

考虑以下算法来查找数字数组中的最小元素A[0, ..., n]。分配一个额外的变量tmp来保存当前最小值。从 , 开始A[0]tmp按顺序与A[1], A[2], ...,A[n]进行比较。什么时候A[i] < tmptmp = A[i]

tmp = A[i]预计执行赋值操作的次数是多少?

我在网上找到了这个解决方案,但无法理解。等式

E[n] = E[n-1] + 1/n, E[1] = 0
Run Code Online (Sandbox Code Playgroud)

给出0 + 1/n + 2/n + 3/n...但我认为这是不正确的。因为所要求的不仅与最小元素有关,还与第二小元素、第三最小元素等有关。

有人能解释一下他们对这个问题的想法吗?谢谢!

A.S*_*S.H 4

您指出的解决方案是正确的,尽管没有明确解释。

\n\n

对 tmp 进行赋值的预期次数是对每个元素进行赋值的概率之和。在元素 j 处进行分配的概率是元素 Xj 为 {X1, X2, \xe2\x80\xa6 Xj} 中最小的概率,根据作者的假设,该概率为 1/j,因为有 j上述集合中的元素。

\n\n

期望是它们的 sum(1/j) ~ ln(n)。

\n