【问题标题】:Example of algorithm which has different worst case upper bound, worst case lower bound and best case bounds?具有不同最坏情况上限、最坏情况下限和最佳情况下限的算法示例?
【发布时间】:2014-09-14 16:34:59
【问题描述】:

是否有任何算法 A,使得对于 A 的一组最坏情况实例 S,A 具有不同的最坏情况上限和最坏情况下限?此外,对于某些输入集,它应该具有不同的最佳情况界限,不等于任何最坏情况界限。

例如,假设 H 是一个假设算法,使得 H 具有最坏情况上限 Ο(n^3)、最坏情况下限 Ω(n^2) 和最佳情况运行时间 Θ(n)。

让我知道上述情况实际上是否有意义?

谢谢:)

【问题讨论】:

  • 这只是我还是最坏情况下限和最佳情况下的运行时间总是一样的?
  • 下限/上限不存在。 5 是人口的下限,10^1000 是人口的上限。它们只是不是很准确的界限。
  • @delnan 它与提出的问题有什么关系?没看懂!!​​span>
  • 下限可以任意小,上限可以任意大。所以总是有不同的上限和下限。对于任何算法,如果 Θ(f(n)) 是该算法的紧界,则 f(n) 是下界,f(n) * n 是上界,它们是不同的。

标签: algorithm time-complexity big-theta big-o


【解决方案1】:

你描述它的方式,选择任何二次排序算法,比如冒泡排序:

  • 最坏情况上限可以说是O(n^3)

  • 最坏情况下界可以说是Ω(n^2)

  • 最好的case运行时间可以说是Θ(n),此时输入已经排序 在开始算法之前,您只需通过一次检查,或者使用 在这种情况下过早终止算法的优化。

【讨论】:

  • 你有没有导致冒泡排序在 O(n^3) 时间内运行的例子?
  • @RontogiannisAristofanis - big-oh 是一个上限。它同时运行在 O(n^2)、O(n^3) 甚至 O(n^3242) 中。
  • 最坏的情况是输入向后排序
【解决方案2】:

这是H 的一个不太自然但可能更令人满意的定义。这个函数以相当愚蠢的方式计算输入列表之和的立方。

def H(lst):
    s1 = 0
    for x in lst:
        s1 += x
    if s1 == 0:
        return 0
    elif len(lst) % 2 == 0:
        s2 = 0
        for x in lst:
            for y in lst:
                s2 += x * y
        return s1 * s2
    else:
        s3 = 0
        for x in lst:
            for y in lst:
                for z in lst:
                    s3 += x * y * z
        return s3

最佳情况下界是 Theta(n)。 O(n^k) 形式的最严格的最坏情况上限是 O(n^3)。 Ω(n^k) 形式的最严格的最坏情况下限是 Ω(n^2)。

但是,请注意,在最坏情况下,任何形式的最紧密界限是 Θ(f(n)),其中 f(2m) = m^2 和 f(2m+1) = m^3。

【讨论】:

    猜你喜欢
    • 2021-09-27
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    相关资源
    最近更新 更多