第四章實踐報告

2022-09-13 01:18:16 字數 1066 閱讀 3194

7-1最優合併問題

1.問題描述:

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

4

5 12 11 2

78 52

2.貪心策略

每次選最小的兩個序列合併得到較小比較次數;每次選最大的兩個序列合併得到較大的比較次數。

兩個長度分別為m和n的序列需要m+n-1次比較,此題樣例的計算路徑為:

較小:((2+5-1)+((2+5-1)+11-1))+(2+5+11+12-1)=6+17+29=52

較大同理。

3.詳細**及注釋

#include #include 

using

namespace

std;

intmain()

sort(a,a+k);//庫函式,(a,a+k)表示從左到右遍歷

int min=0

;

for(int n=0;n1;n++)//此處迴圈求最小比較次數

sort(b,b+k);

int max = 0

;

for(int i=1;i<=k-1;i++)

cout

<"

"return0;

}

3.演算法時間及空間複雜度

當n=1時,就成了m個數的歸併排序,時間複雜度為o(mlogn)。

4.結對心得

這道題是我的同伴打的,他非常細心地向我講解了此題的方法和策略。最優合併問題幫助我更直觀地了解了貪心演算法,還有庫函式的使用。

第四章上機實踐報告

實踐題目 4 2 刪數問題 110 分 給定n位正整數a,去掉其中任意k n 個數字後,剩下的數字按原次序排列組成乙個新 的正整數。對於給定的n位正整數a和正整數 k,設計乙個演算法找出剩下數字組成的新數最 小的刪數方案。輸入格式 第 1 行是1 個正整數 a。第 2 行是正整數k。輸出格式 輸出最...

第四章上機實踐報告

刪數問題 110 分 給定n位正整數a,去掉其中任意k n 個數字後,剩下的數字按原次序排列組成乙個新 的正整數。對於給定的n位正整數a和正整數 k,設計乙個演算法找出剩下數字組成的新數最 小的刪數方案。第 1 行是1 個正整數 a。第 2 行是正整數k。輸出最小數。在這裡給出一組輸入。例如 178...

第四章上機實踐報告

一 實踐題目 二 題目描述 給定一串串行,每次取兩個數的值加起來,然後把兩個數取出來,將兩個數加起來的值放入序列 三 演算法描述 題目大意其實類似哈夫曼編碼,只是他還要再求乙個最大值的 因此進行兩次操作,一次每次都是取最大的兩個數,另一次每次都是取最小的兩個數 每次取到的兩個最大或者最小的數a b進...