数据结构第十章.优秀PPT.ppt
《数据结构第十章.优秀PPT.ppt》由会员分享,可在线阅读,更多相关《数据结构第十章.优秀PPT.ppt(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 10.3 回溯法回溯法 有很多问题,当须要找出它的解集或者要求回答有很多问题,当须要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要运用什么解是满足某些约束条件的最佳解时,往往要运用回溯法。回溯法。回溯法的基本做法是搜寻,或是一种组织得井井有回溯法的基本做法是搜寻,或是一种组织得井井有条的、能避开不必要搜寻的穷举式搜寻法。这种方法条的、能避开不必要搜寻的穷举式搜寻法。这种方法适用于解一些组合数相当大的问题。适用于解一些组合数相当大的问题。回溯法在问题的解空间树中,按深度优先策略,回溯法在问题的解空间树中,按深度优先策略,从根结点动身搜寻解空间树。算法搜寻至解空间树的从根结点
2、动身搜寻解空间树。算法搜寻至解空间树的随意一点时,先推断该结点是否包含问题的解:假如随意一点时,先推断该结点是否包含问题的解:假如确定不包含,则跳过对该结点为根的子树的搜寻,逐确定不包含,则跳过对该结点为根的子树的搜寻,逐层向其祖先结点回溯;否则,进入该子树,接着按深层向其祖先结点回溯;否则,进入该子树,接着按深度优先策略搜寻。度优先策略搜寻。一、回溯法的算法框架一、回溯法的算法框架1.1.问题的解空间:应用回溯法解问题时,首先应明确定义问题问题的解空间:应用回溯法解问题时,首先应明确定义问题的解空间。问题的解空间应至少包含问题的一个的解空间。问题的解空间应至少包含问题的一个(最优最优)解。解
3、。例如:例如:0 01 1背包问题:给定背包问题:给定n n种物品和一个背包,物品种物品和一个背包,物品i i的重量的重量是是wiwi,其价值为,其价值为vivi,背包的最大负重量是,背包的最大负重量是C C:如何选择装入背包:如何选择装入背包的物品,可以使得背包中物品的总价值最大?的物品,可以使得背包中物品的总价值最大?对于有对于有n n种可选物品的种可选物品的0-10-1背包问题,其解空间由长度为背包问题,其解空间由长度为n n的的0-10-1向量组成。当向量组成。当n n3 3时,解空间为:时,解空间为:000000、001001、010010、011011、100100、101101、
4、110110、111111;为了能够便利的运用回溯法解决问题,;为了能够便利的运用回溯法解决问题,我们一般将解空间组织成树或图的形式;我们一般将解空间组织成树或图的形式;2 2生成解空间的方法生成解空间的方法(1 1)扩展结点)扩展结点:一个正在产生儿子的结点称为扩展结点一个正在产生儿子的结点称为扩展结点;(2 2)活结点)活结点:一个自身已生成但其儿子还没有全部生成的节一个自身已生成但其儿子还没有全部生成的节 点称做活结点点称做活结点;(3 3)死结点)死结点:一个全部儿子已经产生的结点称做死结点一个全部儿子已经产生的结点称做死结点;深深度度优优先先的的问问题题状状态态生生成成法法:假假如如
5、对对一一个个扩扩展展结结点点R R,一一旦旦产产生生了了它它的的一一个个儿儿子子C C,就就把把C C当当做做新新的的扩扩展展结结点点。在在完完成成对对子子树树C C(以以C C为为根根的的子子树树)的的穷穷尽尽搜搜寻寻之之后后,将将R R重重新新变变成成扩展结点,接着生成扩展结点,接着生成R R的下一个儿子(假如存在)的下一个儿子(假如存在).回回溯溯法法:为为了了避避开开生生成成那那些些不不行行能能产产生生最最佳佳解解的的问问题题状状态态,要要不不断断地地利利用用限限界界函函数数(bounding(bounding function)function)来来处处死死那那些些事事实实上上不不行
6、行能能产产生生所所需需解解的的活活结结点点,以以削削减减问问题题的的计计算算量量。具有限界函数的深度优先生成法称为回溯法。具有限界函数的深度优先生成法称为回溯法。3 3避开无效搜寻的方法:避开无效搜寻的方法:例例1 1:对对于于n n3 3的的0 01 1背背包包问问题题,考考虑虑:重重量量W W(1616,1515,1515);价值价值p p(4545,2525,2525);背包承重);背包承重C C3030;起先搜寻解空间;起先搜寻解空间;最优解X=(0,1,1),最优值V=50例例2 2:旅行售货员问题:某售货员要到若干个城市去推销商品,已:旅行售货员问题:某售货员要到若干个城市去推销商
7、品,已知各城市之间的路程(或旅费)。他要选定一条从驻地动身,经知各城市之间的路程(或旅费)。他要选定一条从驻地动身,经过每个城市一次,最终回到驻地的路途,使总的路程(或旅费)过每个城市一次,最终回到驻地的路途,使总的路程(或旅费)最短;最短;4123206305410 回溯法搜寻解空间树时,通常接受两种策略避开无效搜寻,提高搜寻效率:(1)用约束函数在扩展结点处剪去不满足约束的子树;(2)用限界函数剪去得不到最优解的子树。这两类函数通称为剪枝函数;最优解(1,3,2,4,1),最优值2544 4子集树与排列树:子集树与排列树:(1 1)子子集集树树:当当所所给给的的问问题题从从n n个个元元素
8、素的的集集合合S S中中找找出出S S满满足足某某种种性性质质的的子子集集时时,相相应应的的解解空空间间称称为为子子集集树树;(n n个个元元素素,有有2n2n个叶子结点,满二叉树;个叶子结点,满二叉树;0 01 1背包问题)背包问题)用回溯法搜寻子集树的一般算法:用回溯法搜寻子集树的一般算法:void backtrack(int t)void backtrack(int t)if(tn)output(x);if(tn)output(x);else else for(int i=0;i=1;i+)for(int i=0;in)output(x);if(tn)output(x);else els
9、e for(int i=t;i=n;i+)for(int i=t;i=n;i+)swap(xt,xi);swap(xt,xi);if(legal(t)backtrack(t+1);if(legal(t)backtrack(t+1);swap(xt,swap(xt,xi);xi);遍遍历历排排列列树须要树须要O(n!)O(n!)计算时间计算时间 44 4回溯法解题步骤:回溯法解题步骤:(1)(1)针对所给问题,定义问题的解空间;针对所给问题,定义问题的解空间;(2)(2)确确定定易易于于搜搜寻寻的的解解空空间间结结构构(子子集集树或排列树树或排列树);(3)(3)以以深深度度优优先先方方式式搜搜
10、寻寻解解空空间间,并并在在搜寻过程中用剪枝函数避开无效搜寻。搜寻过程中用剪枝函数避开无效搜寻。实实现现方方法法:回回溯溯法法对对解解空空间间作作深深度度优优先先搜搜寻寻,因因此此,在在一一般般状状况况下下用用递递归归方方法法实实现现回回溯溯法法。也也可可将将回回溯溯法法表表示为一个非递归迭代过程。示为一个非递归迭代过程。注注:用用回回溯溯法法解解题题的的一一个个显显著著特特征征是是在在搜搜寻寻过过程程中中动动态态产产生生问问题题的的解解空空间间。在在任任何何时时刻刻,算算法法只只保保存存从从根根结结点点到到当当前前扩扩展展结结点点的的路路径径。假假如如解解空空间间树树中中从从根根结结点点到到叶
11、叶结结点点的的最最长长路路径径的的长长度度为为n n,则则回回溯溯法法所所需需的的计计算算空空间间通通常常为为O(n)O(n)。而而显显式式地地存存储储整整个个解解空空间间则则须须要要O(2n)O(2n)或或O(n!)O(n!)内存空间。内存空间。1 10 01 1背包问题:背包问题:解空间:解空间:子集树子集树 可行性约束函数:可行性约束函数:上界函数:上界函数:解解:设设n n件件物物品品的的重重量量分分别别为为w w0 0,w w1 1,w wn n1 1,物物品品的的价价值值为为v v0 0,v v1 1,v vn n1 1;用用optionoption数数组组存存放放最最优优解解,其
12、其中中每每个个元元素取素取1 1或或0 0;include include#define MaxSize 100#define MaxSize 100 /最多物品数最多物品数 int limitw;/限制的总重量限制的总重量 int maxwv=0;/存放最优解的总价值存放最优解的总价值 int maxw;int n;/实际物品数实际物品数 int optionMaxSize;/存放最终解存放最终解 int opMaxSize;/存放临时解存放临时解struct int weight;int value;AMaxSize;/存放物品数组存放物品数组 void Knap(int i,int tw
13、,int tv)/考虑第考虑第i个物品个物品int j;if(i=n)/找到一个叶子结点找到一个叶子结点 if(twmaxv)/找到一个满足条件地更优解,保存它找到一个满足条件地更优解,保存它 maxv=tv;maxw=tw;for(j=0;jn;j+)optionj=opj;else opi=1;/选取第选取第i个物品个物品 Knap(i+1;tw+ai.weight,tv+ai.value);Opi=0;/不选取第不选取第i个物品,回溯个物品,回溯 Knap(i+1,tw,tv);void main()int j;n=4;/4种物品种物品 a0.weight=5;a0.value=4;a1
14、.weight=3;a1.value=4;a2.weight=2;a2.value=3;a3.weight=1;a3.value=1;limitw=7;/限制重量不超过限制重量不超过7 knap(0,0,0);cout”最佳装填方案是:最佳装填方案是:“endl;for(j=0;jn;j+)if(optionj=1)cout”第第”j”种物品种物品”endl;cout”总重量总重量“maxw”,总价值总价值“maxvendl;2.2.全排列问题:全排列问题:描述:输入描述:输入n n个不同的字符,给出他们全部的个不同的字符,给出他们全部的n n个字符的全排列;个字符的全排列;void perm
15、(char str,int k;int n)void perm(char str,int k;int n)int i;char tmp;int i;char tmp;if(k=n-1)if(k=n-1)for(int i=0;in;i+)coutstri”;for(int i=0;in;i+)coutstri”;coutendl;coutendl;else for(i=k;in;i+)else for(i=k;in;i+)tmp=strk;strk=stri;stri=tmp;tmp=strk;strk=stri;stri=tmp;perm(str,k+1,n);perm(str,k+1,n)
16、;tmp=stri;tmp=stri;stri=strk;strk=tmp;stri=strk;strk=tmp;3 3旅行售货员问题:旅行售货员问题:解空间:排列树解空间:排列树#define Max 32767#define n 4main()int n;/图顶点数图顶点数 int xn+1;/当前解当前解 int bestxn+1;/当前最优解当前最优解 float bestc;/当前最优值当前最优值 float cc=0;/当前费用当前费用 float an+1n+1;/图邻接矩阵图邻接矩阵 for(i=1;i=n;i+)xi=i;bestc=Max;backtrack(2);cout
17、”最优结果为最优结果为“bestcendl;Void backtrack(int i)if(i=n)if(axn-1xn MAX&axn1 MAX&(bestc=MAX|cc+axn-1xn+axn1bestc)for(int j=1;j=n;j+)bestxj=xj;bestc=cc+axn-1xn+axn1;else for(int j=i;j=n;j+)/是否可进入是否可进入xj子树子树?if(axi-1xj MAX&(bestc=MAX|cc+axi-1xj0)/while(k0)/对全部列执行以下语句;对全部列执行以下语句;qk=qk+1;/qk=qk+1;/移到下一行移到下一行 W
18、hile(qk=n&!Place(k)/While(qk=n&!Place(k)/找合适位置找合适位置 qk=qk+1;qk=qk+1;if(qk=n)if(qk=n)if(k=n)print(n);if(k=n)print(n);else k+;/else k+;/转向下一列转向下一列 qk=0;/qk=0;/从行头起先找从行头起先找 else k-;/else k-;/回溯上一列;回溯上一列;10.5 贪心算法贪心算法一、基本思想一、基本思想 例:找硬币问题:假设有例:找硬币问题:假设有4种硬币,面值分别为二角五分、一种硬币,面值分别为二角五分、一角、五分、一分。现要找给顾客六角三分钱,如
19、何找拿出的硬币角、五分、一分。现要找给顾客六角三分钱,如何找拿出的硬币个数最少?个数最少?解:一种方法:首先选一个不超过解:一种方法:首先选一个不超过0.63的硬币(的硬币(0.25),然后),然后剩下剩下0.38,再找一个不超过,再找一个不超过0.38的硬币(的硬币(0.25),剩下),剩下0.13,这种方法就是贪心算法。这种方法就是贪心算法。顾名思义,贪心算法总是作出在当前看来最好的选择。也就顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心
20、算法得到的最终结果也意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。具有最优子结构性质的问题也可以用动态规划法是整体最优的。具有最优子结构性质的问题也可以用动态规划法解决,但是贪心算法更简洁、更干脆,且解体效率更高;解决,但是贪心算法更简洁、更干脆,且解体效率更高;但上述算法利用了硬币面值得特殊性,假如把硬币的面值改为3种:0.01、0.05、0.11,要找顾客0.15元钱。用贪心算法得到的解为:实际的最优解是:虽然贪心算法不能对全部问题都得到整体最优解,但对很多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些状况下,即使贪心算法不能得到整体最优解,其
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第十 优秀 PPT
限制150内