算法第四章上机实践报告

实践题目名称:删数问题


问题描述: 

给定一个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.在用贪心法解题时,采用合适正确的贪心策略非常重要,因此常常需要对提出的贪心策略进行证明,在证明某个贪心策略不正确时,常常可以采用举反例的方法。

 

posted @ 2021-11-11 19:33  xiaomeiman  阅读(35)  评论(0编辑  收藏  举报