5 Backtrack Algorithm

5 Backtrack Algorithm

ID:42770620

大小:846.50 KB

页数:41页

时间:2019-09-22

5 Backtrack Algorithm_第1页
5 Backtrack Algorithm_第2页
5 Backtrack Algorithm_第3页
5 Backtrack Algorithm_第4页
5 Backtrack Algorithm_第5页
资源描述:

《5 Backtrack Algorithm》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、BacktrackAlgorithmComputerCollege,ChongqingUniversityInstructor:BoCHENEmail:chenbo@cqu.edu.cnChapter5BasicthinkingExamplesofitsapplicationHighlights:Backtrackalgorithm对于那些组合数较大的问题,如迷宫问题、n皇后问题、国际象棋博弈问题、0-1背包问题,回溯法把解题过程看作是一个在由问题的解向量构成的解空间中搜索寻优的过程。0-1背包的回溯法演示ACBFGIJKHEDLMNO0-1背包实例:n=3

2、,w[16,15,15],v=[45,25,25],c=3011111110000000K(1,0,0)=45L(0,1,1)=50(0,1,0)=25回溯法解题的基本特征动态生成解空间树将符合显式约束的解向量组织到假想的解空间树中解空间树在搜索过程中动态生成在搜索回溯的任意时刻,系统仅保留从根结点到当前扩展结点的路径ACBFGIJKHEDLMNO11111110000000生成全部的解空间树结点将花费指数级的计算时间和空间回溯法解题的基本特征深度优先搜索策略深度优先:一个扩展结点R,生成一个儿子C后,立即让C成为扩展结点宽度优先:在一个结点成为死结点之前

3、,一直是扩展结点ACBFGIJKHEDLMNO11111110000000回溯法解题的基本特征剪枝约束函数:用于剪去那些非可行解,以满足解向量隐性约束限界函数:用于剪去那些可行,但不可能产生最优解的树枝0-1背包问题的剪枝函数:约束函数限界函数思考…思考:为什么深度优先而不是宽度优先?针对所给问题,定义问题的解空间;回溯法解题的基本过程确定易于搜索的解空间结构;以深度优先搜索方式回溯搜索整个解空间,并不断使用剪枝函数避免无效搜索;Problem’sSolutionSpace问题的解向量:回溯法希望一个问题的解能够表示成一个n元式(x1,x2,…,x

4、n)的形式。显约束:对分量xi的取值限定。隐约束:为满足问题的解而对不同分量之间施加的约束。解空间:对于问题的一个实例,解向量满足显式约束条件的所有多元组,构成了该实例的一个解空间。注意:同一个问题可以有多种表示,有些表示方法更简单,所需表示的状态空间更小(存储量少,搜索方法简单)。n=3时的0-1背包问题用完全二叉树表示的解空间生成问题状态的基本方法扩展结点:一个正在产生儿子的结点称为扩展结点活结点:一个自身已生成但其儿子还没有全部生成的节点称做活结点死结点:一个所有儿子已经产生的结点称做死结点深度优先的问题状态生成法:如果对一个扩展结点R,一旦产生了它的

5、一个儿子C,就把C当做新的扩展结点。在完成对子树C(以C为根的子树)的穷尽搜索之后,将R重新变成扩展结点,继续生成R的下一个儿子(如果存在)宽度优先的问题状态生成法:在一个扩展结点变成死结点之前,它一直是扩展结点回溯法:为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数(boundingfunction)来处死那些实际上不可能产生所需解的活结点,以减少问题的计算量。具有限界函数的深度优先生成法称为回溯法旅行售货员问题的回溯法演示递归回溯回溯法对解空间作深度优先搜索,因此,在一般情况下用递归方法实现回溯法。voidbacktrack(intt){

6、if(t>n)output(x);elsefor(inti=f(n,t);i<=g(n,t);i++){x[t]=h(i);if(constraint(t)&&bound(t))backtrack(t+1);}}迭代回溯采用树的非递归深度优先遍历算法,可将回溯法表示为一个非递归迭代过程。voiditerativeBacktrack(){intt=1;while(t>0){if(f(n,t)<=g(n,t))for(inti=f(n,t);i<=g(n,t);i++){x[t]=h(i);if(constraint(t)&&bound(t)){if(solut

7、ion(t))output(x);elset++;}}elset--;}}子集树与排列树遍历子集树需O(2n)计算时间遍历排列树需要O(n!)计算时间voidbacktrack(intt){if(t>n)output(x);elsefor(inti=0;i<=1;i++){x[t]=i;if(legal(t))backtrack(t+1);}}voidbacktrack(intt){if(t>n)output(x);elsefor(inti=t;i<=n;i++){swap(x[t],x[i]);if(legal(t))backtrack(t+1);swap

8、(x[t],x[i]);}}装载问题有一批共n个集装

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。