給定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的貨船種,每個貨櫃的質量由使用者自己輸入指定,在貨船的裝載體積不限的前提下,如何裝載貨櫃才能盡...