輸油管道問題

2021-10-24 16:01:09 字數 2153 閱讀 9369

根據中位數定理,要使總和距離最小,應該選擇中位數作為目標點。因此解決此問題的方法就是將各個油井投影到y軸,找到y座標的中位數即可。

解題思路:要找出乙個數的中位數,最簡單的方法就是對陣列進行排序,但是快速排序的時間複雜度也需要o(nlogn)。對與有序陣列a[n],如果陣列是奇數個,中位數就是a[n/2]。如果陣列是偶數個,中位數是中間兩個數之和,但是可以發現,當管道選到中間兩個數任何乙個位置時,距離總和和中位數是一樣的,因此,這裡選取a[n/2]。

因此該問題變為求解有序陣列a[n/2]位置的元素,即第  k=n/2 + 1 小元素。

假設元素彼此不等時設計思想:

1、用元素m作為標準將s劃分為 s1 與 s2 。其中s1的元素小於m,s2的元素大於m。

2、如果 k <= sizeof(s1),則在s1中找他的第k小元素。

如果 k = sizeof(s1)+1,則m就是第k小元素。

如果 k > sizeof(s1)+1,則就在s2中找第 k-sizeof(s1)-1小元素。

**實現:

#include

#include

#include

using namespace std;

//第k小元素 

int selectk(int arr, int size, int k)

if(arr[i] > m)

}if(k <= nums)    

return selectk(small, nums, k);

if(k > nums + 1)

return selectk(big, numb, k - nums - 1);

return m;

}int main()

//原陣列序列

for(int j = 0; j < n; j++)

cout << "\n";

//輸油管道問題: 尋找到第 n/2 + 1 小元素即可

int loc = selectk(arr, n, n/2 + 1); 

cout << "管道位置:" << loc << "\n" << endl; 

delete arr;    

} return 0;    

}假設有相同元素時:

設計思想:1、用m作為標準將s劃分為,small,equal,big,三個陣列。其中small中的元素小於m,equal中的元素等於m,big                          中的元素大於m

2、如果k <= sizeof(small) , 則在small中找第k小元素

如果k > sizeof(small) + sizeof(equal),則在big中找第 k-sizeof(small)-sizeof(equal)

否則 ( k > sizeof(small)  &&  k <= sizeof(small) + sizeof(equal)),則在equal中找第 k-sizeof(small)小元素。

#include

#include

#include

using namespace std;

int selectk(int a, int length, int k)  

else if (a[i] == value)  

else  

}  if (k <= nums)return selectk(small, nums, k);  

else if (k > nume + nums)return selectk(big, numb, k-nums-nume);  

else return value;  

}  int main()

for (int j = 0; j < n; j++)

cout << endl;

cout << "管道位置是:" << selectk(array, n, n/2 + 1);

delete array;

return 0;

}

輸油管道問題

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

輸油管道問題

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

演算法 輸油管道問題

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