【发布时间】:2015-08-26 16:27:53
【问题描述】:
我的教授说快速排序的最佳情况是当拆分平衡时(即当主元始终是中间元素时)。
现在可以通过使用循环关系来确定最佳情况快速排序的复杂性,如下所示:
T(n) = 2*T(n/2) + partitioning(n)
在下一步中,他说:
因此= ~n * log2(n)
有人能详细说明你如何计算这个吗?我搜索了很多,但所有的解释都是用 big-Oh 符号表示的,或者并没有真正解释如何解决/计算重复性。
【问题讨论】:
-
这不是tilde notation 的用法。您在寻找大 O 还是波浪号?
-
@amit Tilde。在本书中,波浪号被定义为 Big-O,但没有去掉常数因子。即:5x^4 + 3x^2 = ~5x^4,但 O(x^4)
-
问题是,快速排序不是 ~nlogn 波浪符号...(好吧,如果您指定只计算某些特定操作,可能是这样,但我仍然怀疑)。它将是 ~C*nlogn,对于一些常数 C
-
是的,快速排序平均约为 1,39log2(n)。但我想知道最好的情况。不太清楚你在这里指出什么。
-
我指的是,(1)如果不先分析
partitioning(n),您将无法继续计算。 (2)partitioning(n)不太可能完全是~n(这是唯一可以准确地给你~nlog_2(n)的)。 (3) 就个人而言,我觉得波浪符号很垃圾,因为它太依赖于平台而没有任何价值(例如,在支持向量运算的机器上,与不支持向量运算的机器相比,预计会有不同的性能),但这只是我的 POV,我不要试图强迫别人。
标签: algorithm sorting time-complexity quicksort