📄 题目要求.txt
字号:
某石油公司计划建造一条由东向西的主输油管道。该管道要穿过一个有n口油井的油田。从每口油井都要有一条输油管道沿最短路经(或南或北)与主管道相连。如果给定n口油井的位置,即它们的x坐标(东西向)和y坐标(南北向),应如何确定主管道的最优位置,即使各油井到主管道之间的输油管道长度总和最小的位置?证明可在线性时间内确定主管道的最优位置
给定n口油井的位置,编程计算各油井到主管道之间的输油管道最小长度总和。
由文件input.txt提供输入数据。文件的第1行是油井数n,1≤n≤10000。接下来n行是油井的位置,每行2个整数x和y,-10000≤x,y≤10000。
程序运行结束时,将计算结果输出到文件output.txt中。文件的第1行中的数是油井到主管道之间的输油管道最小长度总和。
由题意易得本题x对结果毫无影响,不必考虑。假设铺油管道y坐标为k,则结果为所 有|yi-k|的和,所以问题就在于求k。而中位数这点就是最小代价点。证明:假设中间点不为最小代价点,而为第k点,(1<=k<n/2+1)或者(n/2+1<k<=n),因为对称性,证明前半段即可。k包含了非给定点。先令K为n/2+1的最临近点。原前半段代价为s1,后半段代价为s2。当n为奇数时,k=n/2。那么前半段变为s1-(n/2)x,后半段变为s2+(n/2+1)x,总代价和变为s1+s2+x ,因为x>0,所以代价变大。当n为偶数时,k=n/2-1(因为n/2与n/2+1为等价中位数。)那么前半段变为s1-(n/2-1)x,后半段变为s2+(n/2)x,总代价和变为s1+s2+x ,因为x>0,所以代价变大。以此将往下递推至k=1,代价不断变大,这与k为最小代价点相矛盾。n/2+1<k<=n时同理可证。所以最小代价点为中位数。问题转化为求中位数。算法采用平均情况下的线性时间选择算法。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -