【发布时间】:2018-05-21 22:19:12
【问题描述】:
快速排序的最佳情况是 n log(n),但每个人都使用 Big-O 表示法将最佳情况描述为 O(n log (n))。根据我对符号的理解,快速排序有 Big-Omega(n log (n)) 和 O(n^2)。这是正确的还是我误解了 Big-Omega 符号?
【问题讨论】:
标签: time-complexity big-o quicksort
快速排序的最佳情况是 n log(n),但每个人都使用 Big-O 表示法将最佳情况描述为 O(n log (n))。根据我对符号的理解,快速排序有 Big-Omega(n log (n)) 和 O(n^2)。这是正确的还是我误解了 Big-Omega 符号?
【问题讨论】:
标签: time-complexity big-o quicksort
Big-O 和 Big-Omega 是描述函数的方式,而不是算法。说 Quicksort 是 O(n^2) 是模棱两可的,因为你没有说你描述的是算法的什么属性。
算法可能具有最佳情况的时间复杂度和最坏情况的时间复杂度。如果对每个输入大小使用性能最佳或最差的输入,这些是算法的时间复杂度。
这与描述函数上限和下限的 Big-O 和 Big-Omega 不同。
时间复杂度是作为输入大小的函数给出的,它可以有自己的上限和下限。
例如,如果您知道最佳情况并不比 nlogn 差,那么您可以说最佳情况时间复杂度为 O(nlogn)。如果你知道它正是 nlogn,那么说 Theta(nlogn) 会更准确。
【讨论】:
您的详细信息不正确。 Big-O 在技术上应该是最坏的情况。 QuickSort 的平均情况为 O(n log n),最坏情况为 O(n^2)。按照技术定义,QuickSort 的正确 Big-O 是 n^2。但随机获得该性能的机会几乎为零(除非您在已排序的列表上运行 QuickSort),因此 QuickSort 被赋予 n log n 的 Big-O,即使它在技术上不正确。
另一方面,Big-Omega 在技术上被定义为“至少需要这么长时间”,因此它是一个下限。这意味着 QuickSort 具有 Big-Omega(n log n) 而 n^2 与 QuickSort 和 Big-Omega 无关。
【讨论】: