最優合併問題

2021-07-25 05:16:54 字數 628 閱讀 1896

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

測試用例: 4(序列數)

5 12 11 2(序列中的元素數) 

輸出:     78(最差情況)     52(最優情況) 

貪心法則,如果最先處理兩個大的,那麼在以後的過程中就會每次都加上大的多出的那一部分,這樣就能保證是最差情況

同理,最先處理兩個小的,那麼在以後的過程中會最後處理大的,大的多出來的那部分就沒算到總和裡面去,這樣保證是最優情況

#include#include#include#includeusing namespace std;

#define m 101

int a[m],b[m];

int k,n;

int cmp(int a,int b)

int main()

{ while (~scanf("%d",&n))

{int i;

memset(a,0,sizeof(a));

memset(b,0,sizeof(b));

for (i=0;i

最優合併問題

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

最優合併問題

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 最好情況 雖然...

最優合併問題

給定k個排好序的序列s1,s2,sk,用2路合併演算法將這k個序列合併成乙個序列。假設所採用的2路合併演算法合併兩個長度分別為m和n的序列需要m n 1次比較。試設計乙個演算法確定合併這個序列的最優合併順序,使所需要的總比較次數最少。include define n 4 int min int a ...