小结

 

1. 你对回溯算法的理解

基本思想:当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。

基本步骤:(1) 确定易于搜索的解空间结构; (2) 利用深度优先法搜索解空间:递归或迭代;(3) 为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数 (bounding function) 来处死那些实际上不可能产生所需解的活结点,以减少问题的计算量, 以及为了保证每一步都走在约束条件内使用约束函数。

区别穷举:回溯算法可以看作穷举法搜索的改进,若要求问题的所有解,就要回溯到根。回溯法解问题的一个显著特征是,解空间树是虚拟的,在任何时间,只需保存从根节点到当前扩展结点的路径。

基本应用:回溯法常常可以避免搜索所有可能的解,所以它适用于求解组织数量较大的问题。

2. 你学习《算法分析与设计》课程的收获

在学习算法分析与设计前,解决编程题的问题只能靠想到什么是什么,没有系统的方法流程,虽说以前做的题目与现在的相比难度较小,且一开始有老师带着,但若遇到课堂外的题目,就可能由于找不到解题思路,一开始方向就是错的;有时能用比较巧妙的方法做对,有时只能用笨方法,虽然能做对一些测试点,但对应的“笨算法”时间复杂度或空间复杂度会很高。迭代与递归在数据结构时有学过,但在知识架构中也仅限于这种工具方法的认知,并不算算法。学习《算法分析与设计》后,能够学习到针对尽可能减少时间复杂度的一些计算思路,还能将抽象化的方法具体为某种抽象但能具体表现出来的形式,如树,表等,对于之前所学的数据结构又有了进一步回顾认识。而且,有了系统标准化的算法套路,对于自身代码的检验分析也更加有迹可循,可以靠自己寻找错误漏洞、或没能过测试点所导致的代码缺陷。

3. 你在学习过程中曾遇到了哪些困难,希望老师或助教及时给予帮助。

在学习新算法时,我听完讲新课后,会根据自己的理解直接去做题,但一般会容易卡住,只能翻书照着例题写,感觉还是不得不先把书本的算法模板吃透才能进一步按照自己的个性化想法做题。另外有时算法大概思路还是那个思路,但可能方向顺序会不太一样,比如自然数拆分与之前写的回溯法回溯方向不一样,这可能就需要求助才能知道。

4. 你对本门课程的教学有哪些建议

课程作业与难度都适中,可以编程作业占比大一些,考试就相对简单一些,虽然知道算法平时就要学好,但不太想考试时压力大哈哈(谢谢老师本学期的教学!)

posted @ 2020-12-19 16:18  江鹏  阅读(92)  评论(0编辑  收藏  举报