第五章作业及学期总结

  1. 对回溯法的理解

  回溯法按深度优先策略搜索问题的解空间树。首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否可行(即能得到问题的解)。如果不可行,则跳过对该节点为根的子树的搜索,逐层向其祖先节点回溯;否则,进入该子树,继续按深度优先策略搜索。

  回溯法的基本行为是搜索,搜索过程使用剪枝函数来为了避免无效的搜索。剪枝函数包括两类:1. 使用约束函数,剪去不满足约束条件的路径;2.使用限界函数,剪去不能得到最优解的路径。

   问题的关键在于如何定义问题的解空间,转化成树(即解空间树)。解空间树分为两种:子集树和排列树。两种在算法结构和思路上大体相同。

 

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

学习了《算法分析与设计》这门课后,我对常见的算法有了一个基本的了解。本书主要从算法概述、递归与分治策略、动态规划、贪心算法、回溯法、分支限界法、随机化算法、线性规划与网络流、NP完全性理论与近似算法等九个章节对计算机算法进行了介绍,我也将从以下几个方面对算法进行简单概括。

 

第一章--算法概述,主要介绍了算法和程序的定义及组成,以及评价算法优劣的标准--时间复杂度T(n)=O(f(n))和空间复杂度S(n)

 

第二章--递归与分治策略。本章主要讲述了递归和分治(将问题拆分为k个规模较小的子问题,子问题可能会多次计算【递归是实现分治的一种手段】)的思想,以及涉及到递归与分治策略的二分搜索(折半大问题拆小)、大整数的乘法【分治成小数相乘再相加】、归并排序【有序子序列一分为二再合并】、快速排序【分为两个,小的在前大的在后,两个序列分别排序】以及循环赛日程表【递归往n阶填数,使得每个都与n-1个比赛过】问题。

第三章--动态规划。本章主要讲述了动态规划(求解决策问题最优化,问题分解,但子问题无需重复计算)的思想,以及动态规划算法的基本要素、最长公共子序列、流水作业调度【多作业调度完工时间最少】、0-1背包问题【满足容量价值最高】、最优二叉搜索树【哈夫曼树,带权路径长度最短】等一系列问题。

第四章--贪心算法。本章主要讲述了贪心算法的基本思想(选择当前最优,获得局部最优解),以及贪心算法中的用到的哈夫曼编码【每次选最小的作为叶子节点组成一棵树生成新节点】、0-1背包问题。

第五章--回溯法。本章主要讲述了回溯法的基本思想(问题转化为图或树,利用深度优先搜索DFS的方式寻找可行解),以及回溯法中常见的n皇后问题【n个放到n阶矩阵上,不同行不同列】、0-1背包问题、图的m着色问题【m种颜色才能使图中每条边连接的2个顶点着不同颜色】、旅行售货员问题【从ii经过所有点路程最短(求哈密顿圈经过所有点再优化)】、批处理作业调度问题【作业完成时间和最小】、连续邮资问题【不同面值贴出连续邮资】等一系列问题。

  《算法分析与设计》主要通过对上述算法的介绍,让我对常见的算法有了基本了解,这对以后问题求解有很大的帮助。

  同时,也因为郑老师的悉心指导和严格要求,我这学期的代码能力提高了一个层次,比以往任何一个学期学到的东西,打的c++代码都要多,老师全身心为学生着想,我们都看在眼里,每次上机,永远都是最后离开的那一个人。也为了让我们能真正掌握某个算法,会在上机课要求我们讲完代码才能离开,在同学们讲不出来的时候,会一直陪伴和指导大家,直到讲出来为止,好几次看到在上机课结束,我们已经吃完饭要离开饭堂的时候,老师才匆匆赶来饭堂吃饭,不得不说一句,老师您幸苦了,感谢您的付出,我收获良多。

 

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

遇到最多的困难大概就是写出了有一堆 bug的代码又一直de不出来。再者就是学贪心策略的时候最开始一直不知道最优策略从何找起。

 

  1. 你对本门课程的教学有什么建议

郑琪老师真的是一个好老师,各方面都做得挺完美的了,我们学生都看在眼里,一直保持这种教学方式,就够了哈哈哈哈哈哈哈哈哈哈哈,感激您这一学期给我带来的帮助。下学期选不到您的操作系统实践,让我难过了好久。希望以后还有机会上您的课。

posted @ 2020-12-20 11:50  L_XIAOTIAN  阅读(92)  评论(0编辑  收藏  举报