1. 程式人生 > >【演算法】第四章實踐報告

【演算法】第四章實踐報告

1. 實踐題目

7-3 程式儲存問題 (90 分)

2. 問題描述

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

3. 演算法描述

#include <iostream>

#include <algorithm>  //sort排序需要呼叫的標準庫

using namespace std;

 

int shiyan(int a[],int n,int L){

sort(a,a+n); //sort函式

int temp = 0;

for(int i=0;i<n;i++){

temp=temp+a[i];

if(temp>L) return i;

if(i==(n-1))  return n;

}

}

int main()

{

int i,n,L;

cin>>n>>L;

int *a=new int[n];

for(i=0;i<n;i++)

{

cin>>a[i];

}

cout<<shiyan(a,n,L);

}

4. 演算法時間及空間複雜度分析(要有分析過程)

程式中採用sort函式對陣列進行排序,其時間複雜度是n*log2(n)nlogn排好序後,就是從小到大加入陣列元素,知道存滿為止,這一過程時間複雜度為n。空間複雜度,不考慮sort函式,由於迴圈體中的程式碼須要執行n次則其O(n)。

5. 心得體會(對本次實踐收穫及疑惑進行總結)

這次是課上和隊友結對程式設計完成的,其實也很簡單,排好序之後,直接在迴圈體中核心程式碼temp=temp+a[i];if(temp>L) return i;if(i==(n-1)

就好了,我一開始是用選擇排序法對陣列進行排序的,但是老師過來就直接提問為什麼不直接採用sort函式呢?那是我才醒悟過來(但是還沒怎麼用過sort函式排序),的確採用sort函式後,做題時間都省掉一大半了,打消我學習c++以來使用的氣泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方法是類似於快排的方法,時間複雜度為n*log2(n),執行效率較高