算法第五章作业

一、你对回溯算法的理解

1.原理:在问题的解空间树中,按深度优先策略,从根节点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按深度优先策略搜索。求问题的所有解时,要回溯到根,且根节点的所有子树都已被搜索遍才结束。回溯法求问题的一个解时,只要搜索到问题的一个解就可结束。

2.适用:解组合数较大的问题。例如:旅行售货员问题,n后问题,0-1背包问题

3.算法框架

  1)问题的解空间:明确定义问题的解空间。问题的解空间至少应包含问题的一个(最优)解。后将解空间很好的组织起来,使得能用回溯法方便地搜索整个解空间。通常组织成树或图的形式。解空间树的第i层到第i+1层边上的标号给出了变量的值。从树根到叶的任一路径表示解空间中的一个元素。

  2)基本思想:从开始结点(根节点)出发,以深度优先方式搜索整个解空间。这个开始结点成为活结点,同时也成为当前的扩展结点。在当前的扩展结点处,搜索向纵深方向移至一个新结点。这个新节点就成为新的活结点,并成为当前的扩展结点。如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点成为死结点。此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。回溯法以这种方式递归地在解空间中搜索,直至找到所要求的解或解空间中已无活结点时为止。

  3)递归回溯和迭代回溯来实现回溯法

二、请说明“子集和”问题的解空间结构和约束函数

1.解空间结构:一颗解空间树,选择某个数为一,不选为2,{(0,0,0,0,0),(1,0,0,0,0)......(1,1,1,1,1)},。解空间树的第1层到第5层边上的标号给出了变量的值。从树根到叶的任一路径表示解空间中的一个元素,最后答案是(1,1,1,0,0)

2.约束函数:如果当前的选择和后面的所有选择加起来都比c小,说明怎么也凑不出来c,所以剪掉。

三、请说明在本章学习过程中遇到的问题及结对编程的情况

第一题卡了很久,和搭档一起理解书上的思想,打了一遍代码,明明理解了,老师一问,就懵了,可能还不是理解得很到位,就把代码的每一行都标上注释,写出来,思路会更清晰。

posted on 2019-12-18 20:29  行星9  阅读(155)  评论(0)    收藏  举报

导航