二元计数器增量的平均病例时间复杂度分析

时间:2016-11-13 05:24:08

标签: algorithm time-complexity average

我试图找到二进制计数器的平均时间复杂度,而不是摊销分析。由于我对时间复杂度分析技能不完全有信心,我想确认下面提供的伪代码的平均案例分析是正确的。

k 为数组的长度。

Increment(Array)
    i = 0
    while i < k and Array[i] == 1
        Array[i] = o
        i = i + 1
    if i < k
        Array[i] = 1

为了找到平均花费的时间,我发现每次运行时平均翻转的位数。结果,我发现这是 O(2 + k /(2 ^ k)),对于大 k <等于 O(1) / em>的。

这是正确的平均案例运行时间吗?如果没有,我将如何开始解决这个问题?

1 个答案:

答案 0 :(得分:1)

  

我假设每个输入都有相同的概率发生

这意味着每个位的开启或关闭概率为1/2。

geometric distribution是复杂性的相关分布:你翻转硬币,并在第一个尾部结果上结束实验(没有什么可以进一步携带)。

这里的几何分布的平均值恰好是2(参见上面的链接,或者从基本原理推导出来),因此平均复杂度确实是 O(1)