算法第五章作业
回溯法
一、理解
- 回溯法有“通用的解题法”之称,可以系统地搜索一个问题的所有解或任一解,它是一个既带有系统性又带有跳跃性的搜索算法。
- 在问题的解空间树中,按深度优先策略,从根节点出发搜索解空间树。
上述是课本针对回溯法给出的定义,与我而言简而言之,回溯法就是穷举分析加上期间必要的限制条件解得结果。所谓系统性,囊括其所有解集合为一系统;跳跃性,在出现不符合限制条件时跳过为跳跃性。而回溯法中又有迭代回溯和递归回溯,但其实此二种都是差不多的道理,每一步进行尝试,若不符合,则回去上一层,符合继续往下。
二、“子集和”问题的解空间结构和约束函数
- 问题的解空间是回溯法求解问题时首先要明确定义的,其最少应包含一个问题的(最优)解,而解空间通常被定义为树或图的形式化。
- 约束函数和限界函数统称为剪枝函数,是为了避免无效搜索提高效率
约束函数:在拓展结点处剪去不满足约束的子树
限界函数:剪去得不到最优解的子树
子集和问题判定是否存在S的一个子集S1,使S1中的元素之和为c。集合S={x1,x2,…,xn}中任意组成的集合都有可能是其解空间,如:{(x1),(x1,x2),(x1,x2,x3)....}
约束函数为若当前选中元素加上后在后续继续加时总和已经大于判定极限,则舍去该结点。
三、在本章学习过程中遇到的问题及结对编程的情况
回溯法我觉得还是在剪枝函数部分比较难,一个更高效率的回溯搜索往往取决于其剪枝函数的功效。所以做好剪枝函数这部分工作是比较重要的。 结对编程情况一如既往,互相学习,哈哈哈。