INCREMENT(A)
i = 0
while i< A.length and A[i] ==1
A[i]=0
i=i+1
if i< A.length
A[i]=1
我现在正在研究自己的摊销分析,我正在考虑平均案例分析和摊销分析之间的差异,我知道二元计数器操作INCREMENT(数组)的摊销成本是O(1)但是如果我想分析INCREMENT的平均情况?我想假设我们需要翻转的平均位数是n / 2,其中n是位总数,但我在Average Case Time Complexity Analysis of Binary Counter Increment中看到了答案,这对我来说没有多大意义。有人可以解释一下吗?这将有所帮助,因为我真的知道答案:D
答案 0 :(得分:0)
我认为&#34;平均&#34;意味着我们选择一个长度为n
的0和1的随机数组,并且选择每个可能的选项。它相当于将数组的n
个元素设置为0
,概率为1/2,1
概率相同。
while循环的主体至少执行一次的概率是多少?它是1/2(当且仅当数组的第一个元素为1时才执行)。循环体至少执行两次的概率是多少?前两个元素等于1的概率等于1/2 * 1/2 = 1/4(因为第一个和第二个元素等于1的概率是独立的)。我们可以通过归纳显示,至少i
次(1 <= i <= n
)执行while循环体的概率为(1/2)^n
。
这意味着它将以概率1/2进行一次迭代,以1/4的概率进行一次迭代,以1/8的概率进行一次迭代,依此类推。因此,迭代次数的期望值是sum for 1 <= i <= n (1/2)^i
,其高于无限级数1/2+1/4+1/8+...
的总和,其等于1(它显然是常数)。无论输入如何,除while循环外的所有其他操作都将执行常数次。因此,总时间复杂度平均是恒定的。