“三数取中“划分

7-3 “三数取中“划分

      有一种改进RANDOM-QUICKSORT的方法,就是根据从子数组更仔细地选择的(而不是随机选择的)元素作为主元来划分。常用的做法是三数 取中:从子数组中随机选出三个元素,取其中间数作为主元。针对这个问题,假设数组A[1...n]中的元素都不相同,并且有n≥3,用 A'[1...n] 表示已排好序的数组。用“三数取中"方法来选择主元元素x,并定义pi=Pr{x=A'[i]}。

a)对于i=2,3,...,n-1,给出pi的以n和i表示的准确表达式。(注意p1=pn=0)。

b)与一般实现比较,这种实现方法中取A[1...n]的中值x=A'⌊(n+1)/2⌋的可能性增加多少?假设n->∞,请给出这两个概率比值的极限。

c)如果定义一个”好“的划分是选择了x=A'[i],其中n/3≤i≤2n/3,则与一般实现相比,这时得到一个好的划分的可能性增加了多少(提示 :用积分来近似和式)

d)论证相对快速排序而言,”三数区中“方法仅影响其运行时间 Ω(n lg n) 中的常数因数。

 

分析与思考:

a)pi表示主元为i,对应的意义是:三个数中有一个数为i,然后其他两个数中有一个数大于i,另外一个数小于i,则相应的概率为:

             

b) 将i = ⌊(n+1)/2⌋代入到pi中,得到

 

             

   一般的方法取得中值的可能性为1/n

            

c) 一般的方法中取得好的划分的概率为1/3,这种方法为

       

    因此取得好的划分的概率增加了4/9

 

d) 先求出期望的位置

             

也就是ET = E(T/2)+n

根据主定率,期望的运行时间ET =  Ω(n lg n) ,因此和一般的方法只差常数因子

你可能感兴趣的:(c)