算法第五章作业

一、对回溯算法的理解

        回溯法有“通用的解题法”之称。用它可以系统地搜索一个问题的所有解或任一解。回溯法是一个既带有系统有带有跳跃性的搜索算法。它在问题的解空间树中,按深度优先策略,从根节点出发搜索解空间树。算法搜索至解空间树时的任一结点时,先判断该节点是否包含问题的解。如果肯定不包含,则跳过对以该结点的为根的子树的搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按深度优先策略搜索。

        回溯法的基本步骤可总结为:

        (1)针对所给问题,定义问题的解空间

        (2)确定易于搜索的解空间结构

        (3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索

常用的剪枝函数有:

用约束函数在扩展至结点处减去不满足约束的子树;

用限界函数减去得不到最优解的子树

         回溯法求问题所有解时,要回溯到根,且根结点的所有子树都已被搜索遍才结束。回溯法求问题的一个解时,只要搜索到问题的一个解就可结束。回溯法适用于解组合数较大的问题。

 

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

          解空间结构为二叉树,第i层到第i+1层表示是否选择第i个元素,向左表示选择,向右表示不选择。

          约束函数:利用rest(当前元素加到最后一个元素的总和)+ sum(当前所选元素之和)>= c作为限界剪枝。

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

在本章学习过程中,拿到一个问题,可以很快确定问题的解空间结构,但是遇到最大的难题就是不知道如何编写约束函数,同时对书本的套用模板也不是十分懂。遇到这些类似的问题就和伙伴讨论,一步一步地问题就得到解决了,真的很感谢伙伴的存在。

posted @ 2018-12-22 22:42  Winnie_apple  阅读(118)  评论(0)    收藏  举报