算法第五章作业
一. 对回溯算法的理解
使用回溯算法首先要确定问题的解空间,然后从根节点出发,以深度优先的方式搜索整个解空间。
可使用递归函数来实现回溯法。
子集树和排列树是用回溯法解题时常用的两类典型的解空间树。
回溯法一定要进行剪枝,用约束函数剪去不含最优解的子树。
二. 子集和问题的解空间和约束函数
解空间: 是否选择当前元素
约束函数:
定义rest初值为全部元素之和,sum为当前已选了的元素之和,
if( sum + rest >= c){ x[t] = 0 ; if (backtrack(t+1)){ return true; } }
三. 本章学习中遇到的问题以及结对编程情况
这一章的学习比较重要的问题时如何进行剪枝,找到问题的约束条件是关键
结对编程情况,我与同伴在做题时会先将问题的框架列出,然后在进行细化,但是做到约束函数那一部分的时候会经常出错,对回溯法的理解还有待加强。