【问题标题】:Average Case Time Complexity Analysis of Binary Counter Increment二进制计数器增量的平均案例时间复杂度分析
【发布时间】:2016-11-13 05:24:08
【问题描述】:

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

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)),对于较大的 kO(1) /em>。

这是正确的平均案例运行时间吗?如果不是,我将如何着手解决这个问题?

【问题讨论】:

  • 如果您的意思是average-case time complexity,那么您将需要算法输入的概率分布。您使用的是什么发行版?
  • 我假设每个输入都有相同的发生概率。
  • 在均匀分布的情况下,平均案例分析和聚合摊销分析的代数实际上是相同的(聚合分析跳过除以n)。特别是总和系列是相同的。

标签: algorithm time-complexity average


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多