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)二维邮局选址问题为
既可以转化为两个一维邮局选址问题进行求解