算法第五章作业
一、对回溯算法的理解
回溯法有“通用的解题法”之称。用它可以系统地搜索一个问题的所有解或任一解。回溯法是一个既带有系统有带有跳跃性的搜索算法。它在问题的解空间树中,按深度优先策略,从根节点出发搜索解空间树。算法搜索至解空间树时的任一结点时,先判断该节点是否包含问题的解。如果肯定不包含,则跳过对以该结点的为根的子树的搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按深度优先策略搜索。
回溯法的基本步骤可总结为:
(1)针对所给问题,定义问题的解空间
(2)确定易于搜索的解空间结构
(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索
常用的剪枝函数有:
用约束函数在扩展至结点处减去不满足约束的子树;
用限界函数减去得不到最优解的子树
回溯法求问题所有解时,要回溯到根,且根结点的所有子树都已被搜索遍才结束。回溯法求问题的一个解时,只要搜索到问题的一个解就可结束。回溯法适用于解组合数较大的问题。
二、“子集和”问题的解空间结构和约束函数
解空间结构为二叉树,第i层到第i+1层表示是否选择第i个元素,向左表示选择,向右表示不选择。
约束函数:利用rest(当前元素加到最后一个元素的总和)+ sum(当前所选元素之和)>= c作为限界剪枝。
三、在本章学习过程中遇到的问题及结对编程的情况
在本章学习过程中,拿到一个问题,可以很快确定问题的解空间结构,但是遇到最大的难题就是不知道如何编写约束函数,同时对书本的套用模板也不是十分懂。遇到这些类似的问题就和伙伴讨论,一步一步地问题就得到解决了,真的很感谢伙伴的存在。
浙公网安备 33010602011771号