演算法複習之最優合併問題

2021-10-07 16:21:57 字數 700 閱讀 5752

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

4(序列數)

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

78(最差情況) 52(最優情況)

需要求最優次數和最差次數,採用貪心求解。求最優次數時每次合併最短的兩個,求最差時每次合併最長的兩個。

仔細想想,這題和霍夫曼編碼就是乙個事,只不過霍夫曼需要求合併樹的路徑,這個比他簡單點。

#includeusing namespace std;

int print(int m,int n)}}

}int minmerge(int num,int n)

printf("%d\n",sum);

sum-=(t-1);

return sum;

}int maxmerge(int num,int n)

printf("%d\n",sum);

sum-=(t-1);

return sum;

}int main()

int min=minmerge(num,n);

int max=maxmerge(num2,n);

cout<

演算法 最優合併問題

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

回溯演算法之最優裝載問題

問題描述 有一批共n個貨櫃要裝上2艘載重量分別為c1和c2的輪船,其中貨櫃i的重量為wi,且 例如 當n 3,c1 c2 50,且w 10,40,40 時,則可以將貨櫃1和2裝到第一艘輪船上,而將貨櫃3裝到第二艘輪船上 如果w 20,40,40 則無法將這3個貨櫃都裝上輪船。基本思路 容易證明,如果...

貪心演算法之最優裝船問題

越來越發現自己的程式設計功底很差,於是近期打算惡補下。看到一題目,初見覺得很簡單,但是實際程式設計的時候,可能是由於自己的基本功太弱的原因吧,還是花費了很長的時間的。題目如下 有一批貨櫃要裝入乙個載質量為c的貨船種,每個貨櫃的質量由使用者自己輸入指定,在貨船的裝載體積不限的前提下,如何裝載貨櫃才能盡...