Algorithm 在子列表中始终选择第二小元素作为轴心时,快速排序时间复杂度
当pivot始终是子列表中第二小的元素时,快速排序的时间复杂性 还是O(NlogN)吗 如果我解递推方程Algorithm 在子列表中始终选择第二小元素作为轴心时,快速排序时间复杂度,algorithm,sorting,Algorithm,Sorting,当pivot始终是子列表中第二小的元素时,快速排序的时间复杂性 还是O(NlogN)吗 如果我解递推方程 F(N) = F(N-2) + N = F(N-2(2)) + 2N -2 = F(N-3(2)) + 3N - (2+1)(2) = F(N-4(2)) + 4N - (3+2+1)(2) 这是O(N^2),但不知怎么的,我怀疑我的答案,请有人帮我澄清一下?首先,快速排序算法的平均时间复杂度为O(NlogN),但它最糟糕的时间复杂度实际上是O(N^2) 快速排序的一般复杂性分析不仅取决
F(N) = F(N-2) + N
= F(N-2(2)) + 2N -2
= F(N-3(2)) + 3N - (2+1)(2)
= F(N-4(2)) + 4N - (3+2+1)(2)
这是O(N^2),但不知怎么的,我怀疑我的答案,请有人帮我澄清一下?首先,快速排序算法的平均时间复杂度为
O(NlogN)
,但它最糟糕的时间复杂度实际上是O(N^2)
快速排序的一般复杂性分析不仅取决于递归关系的设计,还取决于递归关系的F(N-K)
项中变量K
的值。根据您是否在计算最佳、平均和最坏情况的复杂度,该值通常分别由以最佳、平均或最坏元素为轴心的概率分布来估计
例如,如果您想要计算最佳情况,那么您可能认为您的pivot总是将数组分成两部分。(即K=N/2
)如果计算最坏情况,您可能会认为您的轴心是最大或最小的元素。(即,K=1
)对于平均情况,基于元素指数的概率分布,使用K=N/4
。(您可能需要更多信息)基本上,对于一般情况,您的递归关系变成F(N)=F(N/4)+F(3*N/4)+N
,这将产生O(NlogN)
现在,您为
K
假设的值,即2
,只比最坏情况差一步。这就是为什么您不能在此处观察O(NlogN)
的平均情况性能,并获得O(N^2)
首先,快速排序算法的平均时间复杂度为O(NlogN)
,但其最差的时间复杂度实际上是O(N^2)
快速排序的一般复杂性分析不仅取决于递归关系的设计,还取决于递归关系的F(N-K)
项中变量K
的值。根据您是否在计算最佳、平均和最坏情况的复杂度,该值通常分别由以最佳、平均或最坏元素为轴心的概率分布来估计
例如,如果您想要计算最佳情况,那么您可能认为您的pivot总是将数组分成两部分。(即K=N/2
)如果计算最坏情况,您可能会认为您的轴心是最大或最小的元素。(即,K=1
)对于平均情况,基于元素指数的概率分布,使用K=N/4
。(您可能需要更多信息)基本上,对于一般情况,您的递归关系变成F(N)=F(N/4)+F(3*N/4)+N
,这将产生O(NlogN)
现在,您为
K
假设的值,即2
,只比最坏情况差一步。这就是为什么您不能在这里观察O(NlogN)
的平均案例性能,并得到O(N^2)
它看起来是正确的;然而,它将有助于更加严格,例如,使用归纳法证明它在一般情况下确实是O(N^2)。快速排序不是“O(N Log N)”。@YvesDaoust为什么快速排序不是O(NLogN)?@kuze-ItsO(NLogN)
对于一般情况,但其最坏的性能是O(N^2)
。您的快速排序分析版本并不构成一般情况。@我知道这不是一般情况,我只是很好奇快速排序什么时候仍然保持O(NlogN)它看起来是正确的;然而,它将有助于更加严格,例如,使用归纳法证明它在一般情况下确实是O(N^2)。快速排序不是“O(N Log N)”。@YvesDaoust为什么快速排序不是O(NLogN)?@kuze-ItsO(NLogN)
对于一般情况,但其最坏的性能是O(N^2)
。您的快速排序分析版本并不构成一般情况。@我知道这不是一般情况,我只是很好奇快速排序何时仍然保持O(NlogN)