第四章貪心算法實驗報告


1.問題描述
 
4-2 刪數問題 (30 分)
 

給定n位正整數a,去掉其中任意k≤n 個數字后,剩下的數字按原次序排列組成一個新的正整數。對於給定的n位正整數a和正整數 k,設計一個算法找出剩下數字組成的新數最小的刪數方案。如果數字最前面有0不輸出。

輸入格式:

第 1 行是1 個正整數 a。第 2 行是正整數k。

輸出格式:

輸出最小數。

 

2.問題分析

如果要從178543中取出1個數,使這個數最小,應該取8

如果要從17543中取出1個數,使這個數最小,應該取7

如果要從1543中取出1個數,使這個數最小,應該取5
可以發現:1,7,8是一個不降序數列(有相等的升序),也就是逐漸變多,而8,5,4,3是一個不升序數列(有相等的降序),逐漸減少。

8正好是升序數列的最后一個,也是降序數列的第一個。

貪心選擇性質:找到第一個升序數列的末尾並取出它就可以算成功完成了“局部的最優解”,再通過這個繼續取出更多的數,直到取出k個數來

 

3.算法描述

使用一個字符數組來存儲n位的正整數,用函數strlen求出數組長度,遍歷數組,找到非降序末位數,用后一位覆蓋那一位數(刪數)

!!!注意輸出最高位為0的問題

 

 

 

4.時間及空間復雜度分析

時間復雜度:代碼主函數最多兩層循環,循環k次,時間復雜度為O(n^2)

空間復雜度:定義了一個char數組來存儲a,a共有n位,空間復雜度為O(n)

 

5.思考與體會

貪心算法首先需要得到局部最優解,再推導全局最優解。關鍵是找到貪心策略

(1)把求解的問題分成若干個子問題

(2)對每一子問題求解,得到子問題的局部最優解

(3)把子問題的解局部最優解合成原來解問題的一個解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM