五大基本算法——回溯法

作者: 无问o | 来源:发表于2019-12-10 17:02 被阅读0次

一、基本概念

回溯法是一种选优搜索法(试探法)。

基本思想:将问题P的状态空间E表示成一棵高为n的带全有序树T,把求解问题简化为搜索树T。搜索过程采用深度优先搜索。搜索到某一结点时判断该结点是否包含原问题的解,如果包含则继续往下搜索,如果不包含则向祖先回溯。

通俗来说,就是利用一个树结构来表示解空间,然后从树的根开始深度优先遍历该树,到不满足要求的叶子结点时向上回溯继续遍历。

几个结点:
扩展结点:一个正在产生子结点的结点称为扩展结点
活结点:一个自身已生成但未全部生成子结点的结点
死结点:一个所有子结点已全部生成的结点

二、基本步骤

1、分析问题,定义问题解空间。

2、根据解空间,确定解空间结构,得搜索树

3、从根节点开始深度优先搜索解空间(利用剪枝避免无效搜索)。

4、递归搜索,直到找到所要求的的解。

三、两类常见的解空间树

1、子集树
当问题是:从n个元素的集合S中找出满足某种性质的子集时,用子集树。
子集树必然是一个二叉树。常见问题:0/1背包问题、装载问题。

//遍历子集树伪代码
void backtrack(int t){
    if(t>n) output(x);
        else
          for(int i=0;i<=1;i++){
                   x[t] = i;
                   if(legal(t)) backtrack(t+1);}
}

遍历子集树时间复杂度:O(2^n)

2、排列树
当问题是:确定n个元素满足某种排列时,用排列数。常见问题:TSP旅行商问题,N皇后问题。

//遍历排列树伪代码
void backtrack(int t){
    if(t>n) output(x);
        else
          for(int i=0;i<=1;i++){
                   swap(x[t],x[i]);
                   if(legal(t)) backtrack(t+1); 
                   swap(x[t],x[i]);}
}

遍历排列树时间复杂度:O(n!)

通俗地讲,结合Java集合的概念,选择哪种树其实就是看最后所得结果是放入一个List(有序)里,还是放入一个Set(无序)里。

四、剪枝函数

剪枝函数能极大提高搜索效率,遍历解空间树时,对于不满足条件的分支进行剪枝,因为这些分支一定不会在最后所求解中。

常见剪枝函数:

约束函数(对解加入约束条件)、限界函数(对解进行上界或下界的限定)

满足约束函数的解才是可行解。

五、常见案例问题

1、0/1背包问题

2、TSP旅行商问题

3、最优装载问题

4、N-皇后问题

具体问题可百度详细内容。

相关文章

  • 算法相关文章索引(2)

    基本常识 kmp算法百度百科 动态规划几个经典例子总结 五大常用算法之四:回溯法 五大常用算法之五:分支限界法 P...

  • 算法与数据结构

    五大常用算法之一:分治算法 五大常用算法之二:动态规划算法 五大常用算法之三:贪心算法 五大常用算法之四:回溯法 ...

  • 五大基本算法——回溯法

    一、基本概念 回溯法是一种选优搜索法(试探法)。 基本思想:将问题P的状态空间E表示成一棵高为n的带全有序树T,把...

  • 互联网大厂常考算法及套路深度解析

    常考算法 暴力法 回溯法 分支限界法 分治法 动态规划 贪心法 暴力法 也称枚举法、穷举法、蛮力法。 基本思想: ...

  • 五大基本算法——分支限界法

    一、基本思路 与回溯法一样,分支限界法也是在问题的解空间树上搜索问题的解的一种算法。 二、分支限界法与回溯法的区别...

  • 分治限界法

    以下均转载于:五大常用算法-分支界限,加入了一些我自己的想法 1.基本描述 类似于回溯法,也是一种在问题的解空间树...

  • 回溯法与分支限界法

    回溯法与分支限界法 时间 2016-03-24 标签 搜索 回溯法 1、概念 回溯算法实际上一个类似枚举的搜索尝...

  • 算法08-回溯法:面试最常见问题

    算法08-回溯法:面试最常见问题 一、介绍 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜...

  • 八皇后问题

    回溯算法 回溯法又称试探法,回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已...

  • 二叉树遍历的应用之分治法

    而它属于五大常用算法之一,而五大常用算法为:分治、动态规划、贪心、回溯、分支界定。下面来看一下具体相关的算法。 查...

网友评论

    本文标题:五大基本算法——回溯法

    本文链接:https://www.haomeiwen.com/subject/hsqcgctx.html