最優合併問題

2021-10-13 07:33:33 字數 844 閱讀 8992

給定k 個排好序的序列, 用 2 路合併演算法將這k 個序列合併成乙個序列。 假設所採用的 2 路合併演算法合併 2 個長度分別為m和n的序列需要m+n-1 次比較。試設 計乙個演算法確定合併這個序列的最優合併順序,使所需的總比較次數最少。 為了進行比較,還需要確定合併這個序列的最差合併順序,使所需的總比較次數最多。

第一行有 1 個正整數k,表示有 k個待合併序列。 第二行有 k個正整數,表示 k個待合併序列的長度。

輸出最多比較次數和最少比較次數。

在這裡給出一組輸入。例如:

4

5 12 11 2

在這裡給出相應的輸出。例如:

78 52
#include using namespace std;

#define up(i,a,b) for(int i = a; i <= b; i++)

int main()

sort(v.begin(),v.end()); //公升序排列

int maxans = 0,minans = 0; //最多比較次數maxans,最少比較次數minans

vectorv1 = v; //copy乙份vector的資料,v1求最大比較次數,v求最小比較次數

sort(v1.begin(),v1.end(),greater()); //降序排列

while(v.size() != 1) //直到vector中只有乙個元素為止

cout << maxans << " " << minans << endl;

return 0;

}

最優合併問題

include iostream include fstream include vector include queue using namespace std int a 50 n為要合併的序列個數 返回最少合併次數 int mergemin int n q.pop return sum n為要...

最優合併問題

給定k個排好序的序列s1,s2,sk,用2路合併演算法將這k個序列合併成乙個序列。假設所採用的2路合併演算法合併兩個長度分別為m和n的序列需要m n 1次比較。試設計乙個演算法確定合併這個序列的最優合併順序,使所需要的總比較次數最少。測試用例 4 序列數 5 12 11 2 序列中的元素數 輸出 7...

最優合併問題

include define k 4 int data k void sort int data max 12 11 12 11 5 12 11 5 2 k 1 min 2 5 2 5 11 2 5 11 2 k 1 按照這兩個公式求解的 int main index max k 1 最好情況 雖然...