回溯算法思想

本文详细介绍了回溯算法的基本思想,包括原理、解向量的概念、解空间、活节点与死节点的区分。通过0-1背包问题举例说明了回溯法的搜索过程,同时探讨了深度优先和宽度优先策略。此外,还阐述了回溯法的解题步骤和剪枝函数,以及在子集树和排列树问题中的应用实例。
摘要由CSDN通过智能技术生成

首先理解什么几个概念问题

1.原理:回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法 

2.问题的解向量:回溯法希望一个问题的解能够表示成一个n元式(x1,x2,…,xn)的形式。

     显约束:对分量xi的取值限定。

     隐约束:为满足问题的解而对不同分量之间施加的约束。

     解空间:对于问题的一个实例,解向量满足显式约束条件的所有多元组,构成了该实例的一个解空间

3. 理解什么是拓展节点    活节点    死节点

   扩展结点:一个正在产生儿子的结点称为扩展结点。
    活结点:一个自身已生成但其儿子还没有全部生成的节点称做活结点。
    死结点:一个所有儿子已经产生的结点称做死结点。

例子:

例1:n=3的0——1 背包问题的回溯法搜索过程。W=[16,15,15]  p=[45,25,25]  C=30 

     

   在0-1背包问题中;A先成为活节点和拓展节点,下面有两种选择B,C是拓展节点,假设先选择B作为拓展节点,此时B成为活节点,那么D和E成为拓展节点,由于D不可行,选择E作为拓展节点,E作为活节点,之后是K,由于K作为叶子节点,成为死节点,之后返回到节点E,E也没有拓展节点,成为死节点,依次是B,A有拓展节点,拓展节点为C。。。。。

4理解深度优先,宽度优先

深度优先的问题状态生成法:如果对一个扩展结点R,一旦产生了它的一个儿子C,就把C当做新的扩展结点。在完成对子树C(以C为根的子树)的穷尽搜索之后,将R重新变成扩展结点,继续生成R的下一个儿子(如果存在)。

     宽度优先的问题状态生成法:在一个扩展结点变成死结点之前,它一直是扩展结点。
     回溯法:为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数(bounding function)来处死那些实际上不可能产生所需解的活结点,以减少问题的计算量。具有限界函数的深度优先生成法称为回溯法

解题步骤:

用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。在任何时刻,算法只保存从根结点到当前扩展结点的路径。如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为O(h(n))。而显式地存储整个解空间则需要O(2h(n))或O(h(n)!)内存空间。

     解题步骤:

     1)针对所给问题,定义问题的解空间
     2)确定易于搜索的解空间结构;
     3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

    常用剪枝函数:用约束函数在扩展结点处剪去不满足约束的子树;用限界函数剪去得不到最优解的子树。



回溯法解解空间:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值