回溯算法我觉得相对于动态规划和贪心算法较为简单,因为涉及的情况比较少,可以分为子集树,排列数,n叉树这三种情况去记忆,各种解法也有相应的模版可以套上去。
if (t > n) { // 具体的设置可能要根据数组赋值的实际情况 output(t); } else { if(满足走左子树) { // 约束函数 } if(满足走右子树) { // 限界函数 } }
if (t > n) { output(t); } else { // 采用 n叉树的方式 for (....) { 限界函数 .... } }
排列数采用的是 n 叉树的模版,因为我感觉这样子好像更加简洁一点。
n 叉树与排列数是类似的,只是在上面的基础上选取合适的约束函数保证正确结果。
对于这个学期的总结:
这个学期自我感觉算法学习的不是很好,平时除了 PTA 和 力扣上的一些题目也很少去拓展自己的知识面,上课的内容可以吸收但是课下又忘记了。然后这学期放在算法上的学习时间也不是太多,平时PTA
的题目没有思路的话就会直接去找思路理解完以后再根据自己的理解打上去,自己思考的时间还是比较少的,所以这个是我这学期做的不好的地方之一。希望利用假期的时间把算法好好补一补多打代码。
关于课程教学的话,我觉得老师讲得挺好的,同时我觉得可以设置一些思考题让我们去思考,这样可能更有利于我们去理解这一个算法的本质。