【演算法】第四章實踐報告
阿新 • • 發佈:2018-12-02
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))