【发布时间】:2021-05-06 00:24:24
【问题描述】:
任何算法的最佳情况复杂度是算法完成其任务所需的最短时间。我们知道合并排序、快速排序等算法的最佳情况复杂度是 Ω(n log(n)),它定义了这些算法的下限。
我们知道,在渐近符号中 -
O(n) + O(n log(n)) = O(n log(n))
还有,
Ω(n) + Ω(n log(n)) = Ω(n log(n))
因此,如果在这些排序算法中,我们首先在 O(n) 时间内遍历整个数组,以确定该数组是否已经按升序或降序排序,那么它们的平均情况和最坏情况复杂度将渐近保持不变.但他们最好的情况复杂度现在将变为 Ω(n)。
从逻辑上讲,我理解这些渐近符号的方式肯定存在缺陷,否则当渐近符号正在开发或流行用于度量排序算法时,肯定有人会指出这一点。我是否正确地假设这是渐近符号中的一个似是而非的缺陷,还是我错过了一些渐近符号规则?
【问题讨论】:
-
“我们知道[比较排序]算法的最佳情况复杂度......是O(n log(n))”实际上是最好的 b> 情况是 O(n),正如您所观察到的,因此您的初始假设是不正确的。您可能会想到 平均 案例性能,这确实是 O(n log(n))。
-
@PatrickRoberts 在你引用的那一行中,我说的是 2 种特定算法,即合并排序和快速排序 [比较排序],其最佳情况复杂度实际上是 O(n log(n )) [正如我的算法书籍和快速谷歌搜索所引用的]。因此,我最初的假设是正确的,因为我实际上正在讨论比较排序算法及其最佳情况。
-
您所做的所有陈述(直到最后一段)在技术上都是正确的(即使没有理由在各个地方使用 Omega 和 O - 这意味着您的误解)。但最后一段是不合逻辑的。在谈论什么缺陷?你能扩展一下吗?您对某些算法的最佳情况行为与最坏情况行为不同感到惊讶吗?您对可以修改算法以使其最佳情况的行为发生变化而不是最坏情况的行为感到惊讶吗?
-
“如果在这些排序算法中,我们首先在 O(n) 时间内遍历整个数组以确定数组是否已经排序” 那么你有一个不同的算法不同的最佳情况时间复杂度。
-
@MoB。我正在谈论的缺陷是,对于最佳情况复杂度超过 Ω(n) 的任何排序算法,可以对数组进行简单的 O(n) 遍历以确定数组是否已经排序。这将使所有此类排序算法的最佳情况复杂度为 Ω(n),从而使所有这些算法的最佳情况复杂度的概念变得多余,因为它将是 Ω(n),即对所有算法都相同。
标签: algorithm sorting time-complexity complexity-theory