输油管道问题解法
输油管道问题求的是中位数,用顺序统计量解决。不需要管X坐标,只需要管Y坐标,就OK了。
如果n是奇数,求(n-1)/2的顺序统计量
如果n是偶数,求[N/2,N/2+1]闭区间里面的任意一点,都可以的。程序中采用下中位数
证明如下:
用n为偶数,举例子。
假设T为[N/2,N/2+1]闭区间里面的任意一点,现在移动T距离为d。
当不超过这个区间的时候,必然有N/2的点与管道增加d,N/2的点减少d,所以中的距离不变。
当越过某一个端点的时候,必然有N/2+1的点距离管道增加d,N/2-1的点减少d,所以总的距离在增加。
所以管道在这个[N/2,N/2+1]闭区间里面是最小的铺设费用。
参考:算法导论9.3-9
#include<stdio.h>
#include<stdlib.h>
int partion(int *a,int p,int r){
//划分
int x=a[r];
int i=p-1;
int temp;
for(int j=p;j<r;j++){
if(a[j]<=x){
i++;
temp=a[j];
a[j]&#