【问题标题】:how to estimate best, worst and average cases for time complexity?如何估计时间复杂度的最佳、最差和平均情况?
【发布时间】:2011-11-18 19:21:02
【问题描述】:

我们如何判断算法的获取时间复杂度是最佳情况、最坏情况还是平均情况? 例如,如果我们得到时间复杂度 t(n) = 2n^2 + 3n -1,如何估计最好或最坏或平均的情况?

【问题讨论】:

  • 在归并排序中,平均情况下的时间复杂度是 n^2,最好的情况是 n,最坏的情况是 n^2。我们怎么能这样说。程序是什么?
  • 我想你想说的是冒泡排序而不是归并排序。无论如何这是因为它取决于输入,最坏的情况是当列表反转时,最好的是当它已经排序时,平均值被赋予随机前突变复杂的概率仍然是O(n ^ 2)
  • 我不太清楚。请更清楚地告诉我,如果我们得到 t(n) = n^2+n,平均情况是多少?是否足以说明或我们需要更多?

标签: algorithm time-complexity


【解决方案1】:

第一个注意事项:t(n) = 2n^2 + 3n -1 在最坏、最好和平均情况下始终是big O(n^2)

在某些情况下,复杂度取决于算法的输入,在这些情况下,人们通常会在最坏的情况下计算复杂度。

但是,当您认为最坏情况无关紧要且限制性太强时,您可以进行平均情况分析或摊销分析。例如,如果一个算法在 O(n) 的 (1-1/n)% 的输入和 O(n^2) 的 (1/n)% 的输入中工作,你不想说它是 O(n^ 2),并给出更像 O(n) 的平均复杂度。但最坏的情况仍有可能发生。

查看这篇文章,了解有关平均案例分析和摊销分析的更多详细信息。

Difference between average case and amortized analysis

以及维基百科的文章:

【讨论】:

  • 我不太清楚。请更清楚地告诉我,如果我们得到 t(n) = n^2+n,平均情况是多少? t(n) 是否足以说明在哪种情况下它是或者我们需要更多?
  • 我不太清楚。请更清楚地告诉我,如果我们得到 t(n) = n^2+n,平均情况是多少?告诉我们就足够了吗?还是我们需要其他任何东西?
【解决方案2】:

你只能通过仔细检查算法来判断。

如果您知道完全正确 t(n)=2n^2+3n-1,那么 t(n)=O(n^2),这是最好的,最差的,因此平均时间复杂度。

【讨论】:

  • 我不太清楚。请更清楚地告诉我,如果我们得到 t(n) = n^2+n,平均情况是多少? t(n) 是否足以告诉我们是否需要其他任何东西
  • 如果你有一个精确的方程,那么最好的、最坏的和平均的情况都是一样的。
【解决方案3】:

这简化为 O(2n^2) 或仅仅是 O(n^2)。您删除所有其他元素,因为它简化了。

这被称为大 O 表示法。这简直是​​最坏情况的时候。其他大部分都无关紧要。

【讨论】:

  • 我不太清楚。请更清楚地告诉我,如果我们得到 t(n) = n^2+n,平均情况是多少? t(n) 足以说明还是我们需要更多?
【解决方案4】:

>>Bast Case:

如果您发现最佳情况复杂性,那么您检查图像和以下陈述。

T(n)= c1n+c2(n-1)+c4(n-1)+c5(n-1)+c8(n-1)
      (c1+c2+c5+c8)n-(c2+c4+c5+c6)

nMaximum Power1,所以我们说Best Case复杂度是插入排序O(n)

>>最坏的情况:

如果您发现最坏情况复杂性,则检查图像和以下陈述。

T(n)= c1n+c2(n-1)+c4(n-1)+c5(n(n+1)/2)+c6(n(n-1)/2)+c7(n(n-1)/2)+c8(n-1)
      (c5/2 + C6/2 +C7/2)n^2 +(c1+c2+c4+ c5/2 -C6/2 -C7/2+ c8)

nMaximum Power2,所以我们说Best Case复杂度是插入排序O(n^2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多