带权中位数

 9-2  带权中位数

   对分别具有正的权重w1, w2, ... , wn,所有权重之和为1的n个不同元素x1, x2, ..., xn,带权(下)中位数是满足如下条件的元素xk

                                   

                                   

 

   a)论证x1, x2, ..., xn 的中位数即各xi的带权中位数,此处权值 wi=1/n, i=1,2 ..., n

   b)如何通过排序,在O(nlgn)的最坏情况时间内求出n个元素的带权中位数。

   c)说明如何利用一个线性时间的中位数算法,来在最坏情况Θ(n) 时间内求出n个数的带权中位数。

   邮局选址问题(post-office location problem) 定义如下:已知n个点p1, p2, ..., pn及与它们相联系的权重w1, w2, ..., wn。我们希望能找到一点p(不一定时输入点中的一个),使和式  最小,此处d(a,b)表示点a与b之间的距离。

   d)证明带权中位数是一维邮局位置问题的最佳解决方案,其中所有的点都是实数,并且点a与点b之间的距离是d(a,b)=|a-b|。

   e)找出二维邮局位置问题的最佳解答,其中所有的点都是(x,y)坐标对,并且点a(x1, x2)与点b(x2, y2)之间的距离是Manhattan距离;

d(a, b) = |x1 - x2| + |y1 - y2|

 

分析与解答:

   a)把wi=1/n带入,带权中位数的条件中得到

                                 

                                 

 

        也就是xk此时为普通的中位数。

 

  b)首先对n个不同的元素进行排序,时间复杂度为O(nlgn)

       然后从第1个元素开始,对权重进行累加,知道找到第一个xk满足

                                 

 

     则这个xk就是所求的带权中位数

 

c)这个方法和线性时间内求中位数算法RONDOM-SELECT类似,只是在后处理的时候有些区别,整个过程如下:

     RANDOM-WEIGHT-SELECT(A, p, r, w0) if p = r then return A[p] q ← RANDOMIZED-PARTITION(A, p, r) wl ← 0 for i ← p to q do wl ← wl + w[i] if w0 = wl then return w[q] elseif wo < wl then return RANDOM-WEIGHT-SELECT(A, p, q-1, w0) else return RANDOM-WEIGHT-SELECT(A, q+1, r, w0-wl)

   使用时只需要调用RANDOM-WEIGHT-SELECT(A, 1, n, 1/2)。期望运行时间为Θ(n)

 

d)以下证明带权中位数是一维邮局位置的最佳解决方案

     若xk为带权(下)中位数,只需要证明对任意的x,有f(x) ≥ f(xk),证明如下:

           

      分两种情况来进行证明,

     1.  若 x > xk,则

          1) xi ≤ xk < x, 则 |x-xi| - |xk-xi| = x-xk

          2) xk < xi ≤ x, 则 |x-xi| - |xk-xi| ≥ -(x-xk)

          3) xk < x < xi, 则 |x-xi| - |xk-xi|  = -(x-xk)

          第一种情况是在 xi ≤ xi,后两种情况是在xi > xk 时发生的, 则

         

 

     2.  若 x ≤ xk,则

          1) xi ≤ x < xk, 则 |x-xi| - |xk-xi|  =  -(xk-x)

          2) x < xi < xk, 则 |x-xi| - |xk-xi|  ≥ -(xk-x)

          3) x < xk ≤ xi, 则 |x-xi| - |xk-xi|  =  xk-x

 

           

     上述两种情况下均有f(x) ≥ f(xk),故带权中位数为一维邮局选址位置的最优解。       

 

e)二维邮局选址问题为

 

    

既可以转化为两个一维邮局选址问题进行求解

你可能感兴趣的:(算法导论习题)