輸油管道問題和郵局選址問題

2021-09-06 08:27:13 字數 1094 閱讀 6791

點到直線距離:ax+by+c=0座標(xo,yo),那麼這點到這直線的距離就為:│axo+byo+c│/√(a2+b2),剛開始一直以為要減一,把直線一般公式記成了ax+by+c=1。

《給定n口油井的位置,程式設計計算各油井到主管道之間的輸油管道最小長度總和。

示例:若n=5,各油井座標分別為:(1,2),(2,2),(1,3),(3,-2),(3,3),主管道的最優位置的y座標為2,各油井到主管道之間的輸油管道最小長度總和為6。

主管道是東西向的。

這個和郵局選址問題是一類,想想到兩點間距離之和最短的點一定在兩點之間的線段上,而且是定值,所以郵局選址只需要求出最小和,位址有很多,只要在那個區間就好。

《下面是一段網友的分析:

如果只有一口井,那麼顯然是越近越好啦 如果有兩口井,那麼顯然是有以下三種情況: 1.兩口井都在主管道北邊,那麼這個時候的兩個連線管道的長度和肯定大於兩口井的y座標之差 2.兩口井都在主管道南邊,和情況1是一樣的 3.兩口井,乙個在主管道南邊,乙個在主管道北邊,那麼兩個連線管道的長度和就等於兩口井的y座標之差 顯然情況三是所要的最短管道的設計情況 就是當主管道在兩口井之間的任意位置時,連線管道長度之和都等於兩口井的y座標之差,是最短的長度 那麼將這個結論推廣,當有n口井的時候, 1.n是偶數 只要這n口井分布在主管道的兩邊,一邊n/2個,那麼就是距離之和最小的 2.n是奇數 只要將這n個井中,y座標最中間的(也就是y是中值的那個)井不算,其餘的偶數個井分布在主管道的兩側,這個時候移動主管道,那麼這n個連線管道長度之和就決定於那個沒有算的井了,因為其餘的井的距離之和是固定了的,這個時候只要主管道最接近那個點就好了呀(

1

//可以根據「第k小元素的演算法」 算中位數,那樣不必排序

2 #include 3 #include 4

using

namespace

std; 56

bool cmp(int a, int

b) 7 13

int cal(int str, int

n) 14 25

intmain() 26

37return0;

38 }

>>郵局選址問題和這個一樣,只不過xy都要劃分。(原來採用分治法求中位數)

輸油管道問題

某石油公司計畫建造一條由東向西的主輸油管道。該管道要穿過乙個有n 口油井的油田。從每口油井都要有一條輸油管道沿最短路經 或南或北 與主管道相連。如果給定n 口油井的位置,即它們的x 座標 東西向 和y 座標 南北向 應如何確定主管道的最優位置,即使各油井到主管道之間的輸油管道長度總和最小的位置?1 ...

輸油管道問題

某石油公司計畫建造一條由東向西的主輸油管道。該管道要穿過乙個有n口油井的油田。從每口油井都要有一條輸油管道沿最短路經 或南或北 與主管道相連。如果給定n口油井的位置,即它們的x座標 東西向 和y座標 南北向 應如何確定主管道的最優位置,即使各油井到主管道之間的輸油管道長度總和最小的位置?給定n口油井...

輸油管道問題

根據中位數定理,要使總和距離最小,應該選擇中位數作為目標點。因此解決此問題的方法就是將各個油井投影到y軸,找到y座標的中位數即可。解題思路 要找出乙個數的中位數,最簡單的方法就是對陣列進行排序,但是快速排序的時間複雜度也需要o nlogn 對與有序陣列a n 如果陣列是奇數個,中位數就是a n 2 ...