【发布时间】:2016-02-01 08:08:49
【问题描述】:
我目前正在处理一些考试问题,但此时卡住了。我知道快速排序算法的时间复杂度为O(nlog(n))。对于特定的输入大小,排序列表的时间是 4 分钟。问题继续询问在同一系统上对两倍大小的列表进行排序需要多长时间。
我已经排除了时间不是8分钟(输入大小的两倍=持续时间的两倍,非常非常错误的推理)。
我做了一些工作:
工作A
4 = nlog(n)4 = log(n^n)16 = n^n- 我基本上被困在这一点上。
工作乙
-
X = 2nlog(2n) >> 2n因为输入加倍 X = 2n(1 + log(n))-
X = 2n + 2nlog(n) >> nlog(n)是4分钟 X = 2n + 2(4) = 2n + 8- 我又一次陷入了困境。
【问题讨论】:
-
其实快速排序是 O(n^2) 名字只是混淆
-
@Pooya 考试题中给出了时间复杂度,我无法控制。但是,给定的时间复杂度对于最佳情况或平均情况方案是正确的。您引用的时间复杂度 O(n^2) 是针对最坏情况的。
-
我的意思是,如果你在每一步中选择你的关键元素作为元素的中位数,你可以证明最坏情况的运行时间实际上是在O(n*log(n)) .参见例如en.wikipedia.org/wiki/Quicksort#Selection-based_pivoting。你能说出确切的问题文本吗?这似乎与这里有关。
-
我明白了 :) 是多选吗?
-
我认为对于这个问题,你的考试的校正者必须接受几乎所有提供的解决方案,因为这个问题的格式不是很好。只是朗道符号给出的最坏情况复杂度,甚至不知道实际系数 - 实际复杂度可能类似于 4*nlog(n) - sqrt(2*n) + 100000*n ...所以你可能要做的就是“假设”实际的复杂性实际上是函数 nlog(n)(甚至是 n*ld(n),这似乎更合理;-))
标签: algorithm math time-complexity