回溯算法--简单了解
来源:互联网 发布:现代汉语知乎 编辑:程序博客网 时间:2024/06/16 08:35
概念:
一个大的问题可能有很多小的决策构成,这些小的决策构成的序列就可以称之为一个决策序列。所有的决策序列构成的空间可以称之为解空间。在解空间中满足条件的解称之为可行解,满足最优化条件的解称之为最优解。
其实就是找出所有的可能的解,然后找出所有满足条件的解。
解空间树分为两类树:子集和树,即从一组元素中挑选元素,比如顶和子集问题,那么解空间就是2^n;还有一类就是对元素进行排序,如旅行商问题和4皇后问题。
回溯法的解题步骤:
1、 确定解空间树
2、 确定易于搜索的解空间结构。
3、 以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效的搜索。
为了提高搜索效率,其一是使用约束函数,剪去不能满足条件的子树;其二是使用限界函数,剪去不能达到最优解的子树。
约束函数主要用于每一步都有条件的上面;限界函数往往会考虑某种操作的和是否满足条件。比如4皇后问题只有约束条件,因为过程中没有权值的累加等。而旅行商问题就有限界条件,因为涉及到旅行商的花费问题。
因为解空间是一棵树,所以求解的过程中肯定会递归的解决问题,深度优先搜索。
1、旅行商问题
给出一个带权图,图中的节点表示城市,连线的权值代表从一个城市到另一个城市的代价。一个旅行商选择什么样子的路线才能只经过每个城市一遍,而且所花费的代价最小。这个的解决方案就可以采用回溯法,因为可以列举出所有的路径。比如一共四个城市ABCD,原点城市是A,那么第二个可选择的城市有三种可能,然后依次类推,最终方案有3! = 6种。
有约束函数和限界函数。
2、定和子集问题
给定一个正实数的集合S和一个正实数M,在S中挑出的数字的和能够等于给出的M值。这个的解空间,便是每一个元素出现不出现的组合数。共有2^n次方个元素。
增加了约束条件,即在搜索过程中能否继续下去,要看当前已选择的元素之和加上后面所有元素的和是否能大于M,如果不能,那么继续搜索下去也没有意义。如果能,还要判断当前选择元素的和加上下一个元素的值是否超过了给定的M。要不搜索下去也是在范围之外的。
函数有三个参数:
SumSubSet(s,k,r) s:当前已经选择了的元素之和 k:目前到达的元素序号 r:后面所剩元素的总和。通过不断的递归调用,最终便可以给出所有的可行解。
3、4皇后问题/N皇后问题
在4*4的格子里面放四个跳棋,保证每一个棋子都不在同一行,同一列,同一个对角线。求出所有的可能。
最原始的想法就是每一个跳棋都是16种可能的放置方法,然后找出可行解,这种解序列一共有16^4个,数量非常大。
现在缩小一下解空间范围,增加潜在约束条件不在同一行。那么现在每个棋子的放置方式就有四种方式(棋子都是一样的,假设第K个棋子在第K行),那么每一个棋子都有四种可以选择的放置方法。现在解空间大小为4^4个。
如果再把不在同一列作为潜在的解空间限制条件,那么第一个棋子的选择方式有4种,第二个为3中,。。。。。。。现在解空间大小为4!
主要是约束条件。N皇后问题的约束条件就是两个点的斜率绝对值不能为1. 然后通过一个while循环,本质上是最外层循环的是行坐标,然后调整列坐标,当行达到最后为n的时候,输出结果。
- 回溯算法--简单了解
- 回溯算法简单应用
- 贪心算法-简单了解
- 分治算法-简单了解
- 回溯算法----简单练习全排列
- 回溯算法
- 回溯算法
- 回溯算法
- 回溯算法
- 回溯算法
- 回溯算法
- 回溯算法
- 回溯算法
- 回溯算法
- 回溯算法
- 回溯算法
- 回溯算法
- 回溯算法
- 关于JAVA中内存溢出的解决办法
- SMARTFORMS表格线无法输出
- 收集到的SQL语句大全技巧大全
- Passing pointers to functions
- 从TCP协议的原理来谈谈RST复位攻击
- 回溯算法--简单了解
- java读取资源文件
- 牛逼代码收藏
- Linked List Cycle II
- 【DWR】解决session error问题
- 第14章 重载操作符与转换
- ADB server didn't ACK
- Model Database Structure
- HDFS benchmark 基准测试