【线性模型】
(一)不带权中位数
在一条直线上给出若干点,要求求出直线上的一点使其他所有点到这个点的距离之和最小。
我们会发现按照这些点的坐标排序了之后,答案即为最中间的那个点(若中间有两个点则两个点均可)。怎样来证明呢?
首先证明所求点一定可以表示为给出点中的一个:
设所求的点的坐标为x,设所有L左边的人走到L的距离总和为A,所有R右边的人走到R的距离总和为B,那么易知:
若A>B,要使x-L尽可能的小,那么x应与L重合;
若A<B,要是R-x尽可能的下,那么x应与R重合;
若A=B,x在区间[A,B]内任何点对答案均无影响。
得出:x一定可以用一个已知点表示。
由此也可得出,如果点数为偶数,选取最中间的两个点都为最小值。
接着证明x点为按横坐标排序后的中点:
容易知道:x一定在任意两点之间。
只看L,R,x这三个点,如果x在LR之间,那么LR到x的距离之和即为LR两点的距离;如果x在LR之外,那么距离值和一定大于LR的距离,也就是说不可能再优。同理可知,x必须在任意两点之间,又由上面已证的结论知道,x即为最中间的一点或两点。
(二)带权中位数
接着上面的题目,如果每个人都有一个权值,它们移动到一点的花费为距离与权值的乘积,那么这个时候怎么选点使总花费最小呢?
其实权值就可以看成是这个点上总的人数,仍然要找所有人的中点。那么这个问题就转化为了按坐标排序后,从一段扫描,把扫描过的点的权值相加记为sum。一旦遇到了一个点加上之后sum大于了总权值的一半,那么这个点就是所求的点。
也给出另外一种证明:
我们可以简单地把上面的证明过程看作是左边的人都集合到了M点,而右边的人都集合到了M+1点。此时形成了两军对垒的形式,如果左边的总人数比右边的多,那么从左边走到右边去就没有从右边走到左边来优,反之亦然。那么既然在当前点我们左边的总人数已经比右边多了,那么再往右边移动,左边的人数会进一步增多,而右边的人会减少,那么只会导致更差的结果,所以此时我们可以判断最优点一定在当前点的左边,或者至少在当前这个点。那么范围就从当前的[L,R]缩小到了[L,M],通过不断地缩小范围(而每一次缩小我们都砍掉了一半的范围),最后我们得到的将是一个点——那就是我们要求的集合位置。
下面是百度上的数学证明方法: