1. 程式人生 > 其它 >演算法第四章上機實踐報告

演算法第四章上機實踐報告

實踐題目名稱:刪數問題


問題描述:

給定一個n位正整數a和一個正整數k,求從a中刪去k個數後得到的新數的最小值。

Hint:

1.從a中刪去k個數是指去掉a中任意k個數字,剩下的數字按原次序排列組成一個新的正整數。

2.若得到的新數有前導零,需要刪去。

3.若得到的新數全為0,則輸出0。


演算法描述:

1.採用貪心法。貪心策略是:刪除從左到右第一個遞減序列的第一個數,(特別地,當序列是非遞減時,刪除最後一個數)。

2.迴圈第一步k次。

3.刪除前導零並輸出。


演算法時間及空間複雜度分析:

時間複雜度:O(nk)

// 需要重複執行k次刪除第一個遞減序列的第一個數。

空間複雜度:O(1)

// 演算法在實現的過程中只需要用到固定的幾個變數作為輔助變數。


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

本次實驗課沒能做出第2題即刪數問題,我認為原因歸結於沒有想到一個比較好的貪心策略。一開始,我們想到的貪心策略是“每次刪除序列中最大的數”,經驗證,這種貪心策略不可行,之後一直沒有想到一個合適的貪心策略。查了題解後,才恍然大悟。我們覺得自己還需要多思考、多打題,多積累貪心策略的選擇方法。

貪心法的個人體會和思考:

1.我感覺在很多時候,採用貪心法解題,不僅能大大提高解題的效率,而且在程式碼實現時比較容易。

2.並非所有問題都適合用貪心法解題,採用貪心法解決的問題需要具有最優子結構性質和貪心選擇性質。

3.在用貪心法解題時,採用合適正確的貪心策略非常重要,因此常常需要對提出的貪心策略進行證明,在證明某個貪心策略不正確時,常常可以採用舉反例的方法。