算法第四章上機實踐報告

1、程序存儲問題算法

 

 

一、實踐題目及問題描述數組

 

 

二、算法描述spa

  這一道題其實就簡單的對輸入的各程序長度進行排序,而後在循環裏進行疊加,後經過判斷是否超過長度爲L的磁帶,若超過則將可存儲的數目輸出,若還可存儲,則循環繼續。3d

 

 

三、算法時間及空間複雜度分析(要有分析過程)blog

  算法時間複雜度爲O(n),用了一個for循環依次存儲最短程序。排序

  空間複雜度爲O(1),沒有申請額外的空間。字符串

 

 

 

2、刪數問題for循環

 

 一、實踐題目及問題描述循環

 

二、算法描述程序

 

  這一道題最主要注意的問題就是否是把最大的數刪去就好,要注意高位上的數對數值大小的影響更大。故而,該題的貪心思想是經過高位與下一位的比較,若高位的數值大於下一位,則將高位刪去,而後整個數組左移,len--。第二個要注意的即是,該題的輸入,應用字符串進行存儲,後經過b[i] = a[i]-'0';將字符串裏一個一個元素存進int型的新數組。第三個要注意的就是刪去處在高位的「0」,經過以下代碼實現:

int i=0;
while(i<=len-1&&b[i]==0)
i++;

if(i==len)
cout<<"0"<<endl;
else
for(int j=i;j<=len-1;j++)
cout<<b[j];

 

三、算法時間及空間複雜度分析(要有分析過程)

 

  算法時間複雜度爲O(n^3),用了三個循環分別就刪幾個數、比較、左移進行循環。

 

  空間複雜度爲O(n),空間複雜度須要一個String字符串長度。

 

3、最優合併問題

 

 一、實踐題目及問題描述

二、算法描述

 

  這一道題要注意不僅是把輸入的待合併序列的長度進行比較,在進行m+n-1後還要再進行一次排序,以得出新的待合併序列的排序,從而獲得最優的最屢次比較次數計算和最少比較次數計算。

  算法就是首先設定兩個數組存好待合併序列的長度,後對兩個數組進行升序排序。對於計算最少比較次數,其代碼實現以下:

for(int i=0;i<n;i++){
        b[i+1] = b[i]+b[i+1];
        min[i] = b[i+1]-1;
        sort(b,b+n);
    }
    for(int i=0;i<n-1;i++){
        sum_2+=min[i];
    }
而計算最屢次比較次數,則是
for(int i=n-1;i>0;i--){
        a[i-1] = a[i]+a[i-1];
        max[i] = a[i-1]-1;
    }
    for(int i=n-1;i>0;i--){
        sum_1+=max[i];
    }

 

三、算法時間及空間複雜度分析(要有分析過程)

 

 

 

  算法時間複雜度爲O(n),用了一個for循環來進行。

 

 

 

  空間複雜度爲O(2n),空間複雜度須要2個數組存儲。

 

心得體會

  在愈來愈屢次的結對編成後,發現本身對各章的算法方法掌握的更爲牢固,且在分析問題方面更加的嚴謹和全面。針對貪心算法,也能更好地發現反例,而後在討論中不斷髮現最優子結構。繼續加油,好好打題的同時也多多考慮時間和空間複雜度。

相關文章
相關標籤/搜索