【问题标题】:Does insertion sort have a Θ(n) value?插入排序是否有 Θ(n) 值?
【发布时间】:2021-01-05 06:24:31
【问题描述】:

已知插入排序的最佳情况运行时间为n,最坏情况运行时间为n2。在那种情况下,它有很大的theta值吗?

【问题讨论】:

    标签: algorithm big-o complexity-theory insertion-sort


    【解决方案1】:

    简短的回答,是的,确实如此。 Big-Theta 始终存在。问题是:你是在谈论最好的情况、最坏的情况还是平均情况?你能证明吗?

    最佳情况和最坏情况与 Big-O 或 Big-Theta 不同。最好的情况有一个 Big-Theta。最坏的情况有不同的 Big-Theta。它们不一样。

    让我解释一下我所做的区别。

    大小写与绑定

    进行复杂性分析的人通常对他们的符号非常松懈。这是一个很好的问题,需要精确。案例和界限是不同的正交概念。重要的是不要将它们混为一谈。

    • 案例:最佳情况、最坏情况、平均情况
    • 界限:上限(O),下限(Ω),精确界限(Θ)

    每个案例都有自己的界限。当您分析算法的复杂性时,您需要首先确定您正在分析的情况。您是否正在寻找最佳案例性能?最坏的情况?平均情况?

    然后,当您分析该案例时,您可以尝试确定其上限和下限。

    松散的界限

    重要的是要认识到没有单数上限或下限。其中有很多。例如,让我们看看插入排序的最坏情况性能。它有许多下界和许多上界。

    • 建立 Ω(1) 的下限很简单。我的意思是,每个算法都有一个恒定的下限。它并不总是 下限,但它是 a 下限。
    • 类似地,可以从一个非常宽松的 O(n!) 上限开始。如果您简单地迭代输入列表的每个排列直到遇到排序的排列,这就是需要多长时间。这是世界上最糟糕的排序算法。插入排序肯定比这表现得更好,对吧?

    严格的界限

    下限和上限设置了算法在最佳/最差/平均情况下的表现好坏的下限和上限。但是,如果它们太松散,它们就没那么有用了。越紧越好。

    • Ω(n) 将是比 Ω(1) 更严格的下限。并且很容易证明 Ω(1):排序算法当然必须检查输入列表的每个元素,这需要线性时间。如果我们证明这一点,那么我们知道插入排序的最坏情况性能不仅是 Ω(1),它也是 Ω(n)。
    • 正如您所说,众所周知,最坏情况下的性能上限为 O(n2)。这是一个比 O(n!) 更严格的上限。

    等界

    如果您能够证明下限和上限相同,那么您将得到一个精确的界限 Θ。大西塔。为此,您需要将上限和下限挤在一起,直到它们在正确的答案处相遇。

    • 我们知道 O(n2) 是最严格的上限。
    • 为了得到 Θ,我们需要将下限收紧到 Ω(n2)。证明这并不是这个答案的重点,所以我们假设我们已经做到了。

    如果我们能够证明插入排序的最坏情况性能最好是 Ω(n2),最坏情况是 O(n2),那么我们就知道了正好 Θ(n2)。

    多个 Θs

    我上面写的所有内容都是关于最坏情况的性能。如果您想查看最佳案例性能或平均案例,您必须再次重复所有分析。您必须建立自己的上限和下限并收紧它们,直到它们相等。

    如果你这样做了,你最终会得到三个答案。三个 Big-Theta。

    • 最佳情况: Θ(n)
    • 最坏情况: Θ(n2)
    • 平均情况: Θ(n2)

    事实上,你甚至可以想出更多的 Big-Theta。最好的、最坏的和平均的案例并不是人们可以分析的唯一案例。当然,它们是最常见的,但我可以想象其他的会有自己的下限和上限。

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 2013-06-07
      • 2020-06-01
      • 2012-09-30
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多