Problem 5-1
a.我们将展示每次增量操作的预期增量等于1。假设计数器当前的值为i。那么,我们将以概率
从ni增加到ni+1,否则保持值不变。把这些相乘,我们得到期望增长是
b.对于ni的选择,我们知道在每次递增操作中,我们改变计数器值的概率是1/100。由于这是相对于计数器i的当前值的常数,因此我们可以将最终结果视为p值为0.01的二项分布。因为二项分布的方差是np(1 - p),而每次成功值是100,所以方差等于.99n。
Problem 5-2
a.假设a有n个元素。我们的算法将使用数组P来跟踪已经看到的元素,并在每次检查新元素时将其添加到计数器c中。一旦计数器达到n,我们就知道每个元素都检查过了。设RI(A)为返回A的随机索引的函数。
b.设N为所需搜索次数的随机变量。然后
c.设N为所需搜索次数的随机变量。然后
d.这与在第5.4.2节“我们必须扔多少个球,直到每个垃圾箱至少包含一个球?”的问题,其解为b(ln b + O(1))。
e.平均情况运行时间为(n + 1)/2,最坏情况运行时间为n。
f.设X为随机变量,表示算法终止前检查的元素个数。设Xi为指示变量,表示检查数组的第i个元素。如果i是一个指标使得
,那么P(Xi) =
,因为只有当它出现在包含x的k个指标之前,我们才检查它。如果i是一个指标使得A[i] = x,那么P(Xi) =
,因为只有一个与解对应的指标将被检查。设S = {i|A[i] = x}, S' = {i|
}。然后我们有
因此,平均情况的运行时间是
。最坏的情况是每次出现的x都在数组的最后k个位置。它的运行时间是n−k + 1。
g.平均和最坏情况下的运行时间都是n。
h.SCRAMBLE-SEARCH的工作原理与DETERMINISTIC-SEARCH相同,只不过我们在运行时间中增加了随机化输入数组所需的时间。
i.我将使用DETERMINISTIC-SEARCH,因为它有最好的预期运行时间,并保证在n步后终止,不像RANDOM-SEARCH。此外,在RANDOM-SEARCH随机排列输入数组所花费的时间内,我们本可以执行线性搜索。