我刚从算法简介
中读到这段摘录当分区不平衡时,快速排序需要Ω(n 2 )时间
我如何解释这个Ω(n 2 )?为什么是Ω?我们可以在这里使用big-O表示法吗?
答案 0 :(得分:3)
Big-O表示法,你可能习惯用来描述上界。如果我们说算法有运行时O(n 2 ),我们的意思是算法的运行时最多 某些二次函数。您可以将O符号视为“小于或等于”符号。
Big-Ω表示法就像big-O表示法,但用于描述下界。如果我们说算法有运行时Ω(n 2 ),我们的意思是算法的运行时间至少一些二次函数。您可以将Ω表示法视为“大于或等于”符号。
当我们谈论算法的最坏情况运行时,big-O表示法通常是不合适的。假设我声称算法的最坏情况运行时为O(n 2 )。我所说的是该算法的运行时最多 一些二次函数。也就是说,最坏情况的运行时可能会低很多。作为类比,让我们说我声称我最多 10,000岁。这并不是说得太多 - 我肯定最多只有一万岁,但实际上我比他年轻得多。
另一方面,假设我声称算法的最坏情况运行时为Ω(n 2 )。现在我说算法的最坏情况运行时至少一些二次函数。这实际上说了些什么 - 回到我们之前的比喻,如果我告诉你一些岩石至少有十亿年的历史,它实际上告诉你一些东西 - 它已经很老了!它类似于最坏情况的运行时为Ω(n 2 ) - 我告诉你它至少是二次,排除任何更小的。
希望这有帮助!
答案 1 :(得分:0)
实际上甚至是Theta(n ^ 2)所以它也是Omega(n ^ 2),但是当分区不平衡时声称“快速排序为O(n ^ 2)”并不是非常有用的信息 - 因为{{ 1}}是O(nlogn)
的子集。换句话说,所有O(nlogn)(如快速排序平均情况)也是O(n^2)
。
大O给出了上限,但是在这里,我们想要显示下限 - 在最坏的情况下,我们不能比O(n^2)
更好,而不是我们不能比它更糟,因此我们是没有使用n^2
。
因此,即使最好的快速排序情况是O(n^2)
(但不是O(n^2)
) - 因此说快速排序是O(n ^ 2)并不是非常有用。