演算法第四章實踐報告

2022-09-10 02:33:12 字數 1286 閱讀 3201

1.實踐題目名稱

4-1

程式儲存問題

2.問題描述

設有n 個程式要存放在長度為l的磁帶上。程式i存放在磁帶上的長度是 li,1≤i≤n。 程式儲存問題要求確定這n 個程式在磁帶上的乙個儲存方案, 使得能夠在磁帶上儲存盡可能多的程式。 對於給定的n個程式存放在磁帶上的長度,計算磁帶上最多可以儲存的程式數。

3.演算法描述

先將n個程式按其長度由小到大排好序,然後將程式按順序放入磁帶,直至放不下為止。

具體**實現如下:

#include

#include

using namespace std;

int a[1001];

int main()

int n;

int length;

cin>>n>>length;

for(int i=0;icin>>a[i];

sort(a,a+n);

int temp=length;

int count=0;

for(int j=0;jif(temp>=a[j])

count++;

temp=temp-a[j];

else

continue;

cout該演算法滿足貪心選擇性質。因為貪心選擇性質是指所求問題的整體最優解可以通過一系列區域性最優的選擇。每做一次貪心選擇,就將所求問題化簡為規模更小的子問題。因為該題要求磁碟可以裝盡量多的程式,因為磁碟的空間有限,想要裝多的程式,就應該優先選擇存長度短的程式,這樣每存入乙個程式,待存的程式數目就會不斷減少,使得所求問題化簡為規模更小的子問題,並且每次選的都是當前長度最短的程式,所以都是區域性最優的選擇。綜上,該演算法滿足貪心選擇性質。

4.演算法時間複雜度

該程式進行了一次快排,時間複雜度為o(nlogn),並且該程式迴圈了n次,時間複雜度為o(n),因為o(nlogn)>o(n),所以,該程式的時間複雜度為o(nlogn)。

5.對貪心演算法的理解

「貪心演算法」顧名思義就是貪心,就是想要得到更多,想要接近自己的心中預期。其實貪心演算法總是做出在當前看來是最好的選擇,貪心演算法並不從整體最優上加以考慮,所做的選擇只是在某種意義上的區域性最優選擇,也希望達到乙個整體最優解。但即使貪心演算法不能得到整體最優解,其最終結果也是最優解很好的近似解。

能用貪心演算法求解的問題應具有貪心選擇性質和最優子結構性質。貪心選擇性質:指問題的最優解可以通過一系列區域性最優解的選擇得到。貪心演算法做貪心選擇可以依賴於以往所做過的選擇,但決不依賴於將來所作的選擇,也不依賴於子問題的解。最優子結構性質:指問題的最優解包含其子問題的最優解。

演算法第四章實踐報告

刪數問題 給定n位正整數a,去掉其中任意k n 個數字後,剩下的數字按原次序排列組成乙個新的正整數。對於給定的n位正整數a和正整數 k,設計乙個演算法找出剩下數字組成的新數最小的刪數方案。如果數字最前面有0不輸出 貪心演算法的性質 貪心策略 盡量刪除高位的大的數字即尋找單調遞減的第乙個數然後刪除,若...

演算法第四章實踐報告

1.1問題描述 刪數問題 給定n位正整數a,去掉其中任意k n 個數字後,剩下的數字按原次序排列組成乙個新的正整數。對於給定的n位正整數a和正整數 k,設計乙個演算法找出剩下數字組成的新數最小的刪數方案。如果數字最前面有0不輸出。輸入格式 第 1 行是1 個正整數 a。第 2 行是正整數k。輸出格式...

第四章實踐報告

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