(针对相同元素值的快速排序)在7.4.2节对随机化快速排序的分析中,我们假设输入元素的值是互异的。在本题中,我们将看看如果这一假设不成立会出现什么情况。
a. 如果所有输入元素的值都相同,那么随机化快速排序的运行时间会是多少?
b. PARTITION过程返回一个数组下标q,使得A[p..q−1]中的每个元素都小于或等于A[q],而A[q+1..r]中的每个元素都大于A[q]。修改PARTITION代码来构造一个新的PARTITION’(A,p,r),它排列A[p..r]的元素,返回值是两个数组下标q和t,其中p≤q≤t≤r,且有
• A[q..t]中的所有元素都相等
• A[p..q−1]中的每个元素都小于A[q]
• A[t+1..r]中的每个元素都大于A[q]
与PARTITION类似,新构造的PARTITION’的时间复杂度是Θ(r−p)。
c. 将RANDOMIZED−PARTITION过程改为调用PARTITION’,并重新命名为RANDOMIZED−PARTITION’。修改QUICKSORT的代码构造一个新的QUICKSORT’(A,p,r),它调用RANDOMIZED−PARTITION’,并且只有分区内的元素互不相同的时候才做递归调用。
d. 在QUICKSORT’中,应该如何改变7.4.2节中的分析方法,从而避免所有元素都是互异的这一假设?
解
a.
如果数组的所有元素都相同,那么随机化快速排序每次递归产生一个最不均衡的划分,因此运行时间为Θ(n2)。
b.
![算法导论 — 思考题7-2 针对相同元素值的快速排序 算法导论 — 思考题7-2 针对相同元素值的快速排序](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzU3Ni8yZjRiMWI0ZDE3YTEwZjQwZmNjOGQ2ZTY1YTVkYWZkMC5wbmc=)
c.
![算法导论 — 思考题7-2 针对相同元素值的快速排序 算法导论 — 思考题7-2 针对相同元素值的快速排序](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzM0MC9lZDhlNWUwM2E3ZDc1NmY4MzA1YzliNzYxNzcyNDc4NC5wbmc=)
d.
笔者还没想明白,希望有高手来解答。
代码链接:https://github.com/yangtzhou2012/Introduction_to_Algorithms_3rd/tree/master/Chapter07/Problem_7-2/SameElemQuickSort