我正在从算法简介中快速学习。我遇到了第7章Quicksort的问题7.1-2. -
第一部分很简单,答案肯定是r。但是我甚至无法弄清楚第二部分的问题。我的意思是将枢轴设置为(p + r)/ 2的原因是什么此外,我无法理解我在Google上搜索时找到的解决方案。
请帮助我理解这个修改的优点是什么,如果所有元素都相同,如果可能请提供算法。
答案 0 :(得分:0)
通过将枢轴设置到p和r的中间,我们将大小为n的数组分成两个大小相等的子问题n / 2。如果为下一次重复绘制递归树,则会看到其高度为O(lgn)
T(n)= 2T(n / 2)+ O(n)
想象一下,如果从分区返回的pivot的位置始终是数组中的最后一个元素。然后运行时间的重复将是
T(n)= T(n-1)+ O(n)
如果递归树就像一个链表,你现在看到它为什么效率低下?尝试绘制树并在两种情况下在每个节点上添加成本。
同样修改分区方法以返回(p + r)/ 2很容易。
提示:一种简单的方法是在分区的if条件下拆分< =。