1
用两个递归调用解决递归关系
我正在研究quicksort的最坏情况下的运行时,条件是它不会为very的各种定义进行非常不平衡的分区。 为了做到这一点,我问自己一个问题如果快速排序总是发生在分区的情况下那么运行时间将是什么,使得元素在左分区中,而在右分区中(在中间保留元素,即枢轴)。T(n,p)T(n,p)T(n, p)0<p≤120<p≤120 < p \leq {1\over 2}⌊p(n−1)⌋⌊p(n−1)⌋\lfloor{p(n-1)}\rfloor⌈(1−p)(n−1)⌉⌈(1−p)(n−1)⌉\lceil(1 - p)(n - 1)\rceil111 不难看出,为最坏的情况给出了上限,在最坏的情况下,是允许的最大不平衡分区,因为任何分数分区都将更加平衡,运行时更短,并且不允许任何分数。T(n,p)T(n,p)T(n, p)ppp>p>p> p<p<p<p 很明显,在快速排序中是最好的情况,而是最差的情况。两者都具有在任何教育资源中都能找到的容易复发的关系。但是我不知道一般如何学习。明显的关系是:T(n,12)T(n,12)T(n, {1 \over 2})T(n,0)T(n,0)T(n, 0)T(n,p)T(n,p)T(n, p) T(n,p)=n+T(⌊p(n−1)⌋,p)+T(⌈(1−p)(n−1)⌉,p)T(n,p)=n+T(⌊p(n−1)⌋,p)+T(⌈(1−p)(n−1)⌉,p)T(n, p) = n + T(\lfloor{p(n-1)}\rfloor, p) + T(\lceil(1 - p)(n - 1)\rceil, p) 在这里我被卡住了。我尝试过搜索,但是我能理解的有关分而治之算法的所有文献都按字面意义进行了“除法”,并利用分区总是相等的事实“欺骗”了分析,将术语合并为一个不变。 我不知道如何处理两个递归调用,也不知道删除舍入是否安全。这可以解析地解决吗?如果可以,怎么解决? PS:我对渐近不感兴趣(对于任何常数,它很容易显示)。我对随着变小而使quicksort变慢多少感兴趣,例如,我对的比率感兴趣。p p T (n ,0.25 )Θ(nlogn)Θ(nlogn)\Theta(n \log n)ppppppT(n,0.25)T(n,0.5)T(n,0.25)T(n,0.5)T(n, 0.25) \over T(n, 0.5) PPS:作为一名本科生,如果我发现明显的事情过于冗长或无法解释的琐事,我深表歉意。而且,尽管我不知道是否像其他SE网站一样受到人们的关注,但我会注意到这是个人兴趣,而不是作业。