【问题标题】:Average case of binary counter二进制计数器的平均情况
【发布时间】:2017-04-04 02:14:52
【问题描述】:
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(Array) 是 O(1),但是什么如果我想分析 INCREMENT 的平均情况?我正在考虑假设我们需要翻转的平均位数是 n/2,其中 n 是总位数,但我在Average Case Time Complexity Analysis of Binary Counter Increment 中看到了答案,这对我来说没有多大意义。谁能解释一下?这会很有帮助,因为我真的知道答案:D

【问题讨论】:

  • 您混淆了开启的平均位数开启的连续位数的平均

标签: algorithm binary counter analysis


【解决方案1】:

我假设“平均”意味着我们以相等的概率选择长度为 n 的 0 和 1 的随机数组来选择每个可能的选项。这相当于将数组的每个n 元素设置为0,概率为1/2,1,概率相同。

while 循环的主体至少执行一次的概率是多少?它是 1/2(当且仅当数组的第一个元素为 1 时才执行)。循环主体至少执行两次的概率是多少?它是前两个元素等于 1 的概率,等于 1/2 * 1/2 = 1/4(因为第一个和第二个元素等于一个的概率是独立的)。我们可以通过归纳证明,while 循环体至少执行i 次(1 &lt;= i &lt;= n)的概率是(1/2)^n

这意味着它将以概率 1/2 进行一次迭代,以概率 1/4 进行一次迭代,以概率 1/8 进行一次迭代,依此类推。因此,迭代次数的期望值是sum for 1 &lt;= i &lt;= n (1/2)^i,它以无限级数之和1/2+1/4+1/8+... 为界,它等于1(它显然是一个常数)。无论输入如何,除了 while 循环之外的所有其他操作都会执行恒定次数。因此,总时间复杂度平均是恒定的。

【讨论】:

    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多