网站大量收购独家精品文档,联系QQ:2885784924

典型方法介绍与应用.doc

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
典型方法介绍与应用

典型方法介绍与应用 回溯法 寻找问题的解的一种可靠的方法是首先列出所有候选解,然后依次检查每一个,不过,在实际应用中,很少使用这种方法,因为候选解的数量通常都非常大(比如指数级,甚至是大数阶乘)。对候选解进行系统检查的方法有多种,其中回溯和分枝定界法是比较常用的两种方法。按照这两种方法对候选解进行系统检查通常会使问题的求解时间大大减少(无论对于最坏情形还是对于一般情形),因此,这些方法通常能够用来求解规模很大的问题。 算法思想: 回溯(b a c k t r a c k i n g)是一种系统地搜索问题解答的方法。步骤如下: 1) 定义一个解空间,它包含问题的解。 2) 用适于搜索的方式组织该空间。 3) 用深度优先法搜索该空间,利用限界函数避免移动到不可能产生解的子空间。 开始节点既是一个活节点又是一个E-节点(expansion node)。从E-节点可移动到一个新节点。如果能从当前的E-节点移动到一个新节点,那么这个新节点将变成一个活节点和新的E-节点,旧的E-节点仍是一个活节点。如果不能移到一个新节点,当前的E-节点就“死”了(即不再是一个活节点),那么便只能返回到最近被考察的活节点(回溯),这个活节点变成了新的E-节点。当我们已经找到了答案或者回溯尽了所有的活节点时,搜索过程结束。 回溯方法常被用来设计货箱装船、背包、最大完备子图、旅行商和电路板排列问题的求解算法。 例1[皇后问题]:将n个皇后放到n*n的棋盘上,使得任何两个皇后之间不能互相攻击,也就是说,任何两个皇后不能在同一行、同一列或同一条对角线上。 假设n=4,如上图所示,每个皇后Q1~Q4占据一行,我们要考虑的是给皇后在棋盘上分配一个列,如图(a)所示。从空棋盘开始,按照顺序进行尝试: (1)将Q1放到第1行的第1个可能位置,就是第1列。 (2)考虑Q2。显然第1列和第2列尝试失败,因此Q2放到棋盘的(2,3)位置上,也就是第2行第3列。 (3)接下来考虑Q3,发现Q3已经无处可放了。这时算法开始倒退(回溯),将Q2放到第2个可能的位置,就是棋盘上的(2,4)位置上。 (4)再考虑Q3,可以放到(3, 2)。 (5)考虑Q4,无地方可放,尝试结束,再次回溯,重新开始。 回到开始,仍然从Q1开始,排除原来的选择,Q1的第2个位置为(1,2)。 (1)将Q1放到(1,2)位置上。 (2)Q2放到(2,4)位置上。 (3)Q3放到(3, 1)位置上。 (4) Q4放到(4, 3)位置上,得到问题的一个解,如图(b)所示。 综合以上过程,最简单的归纳就是“向前走,碰壁就回头”。下面将以上过程进一步抽象化表达,以更接近程序设计的需要。 求解步骤如下: (1)假设数组A[n]代表n个皇后(为方便表述,我们假设数组第1个元素下标是1);数组中元素的值为A[i](i=1~n),为第i个皇后所在的列值;假设棋盘为n*n的方阵,第i个皇后一被安置在第i行上(己经排除同一行的可能),因此只需要考虑不在同一列和对角线上的可能。 (2)判断是否可以互相攻击的条件的表达式为: 皇后i和皇后k在同一列上的表达式为:A[i]-A[k]==0; 皇后i和皇后k在对角线上的表达式为:abs(A[i]-A[k])-abs(i-k)==0; (3)初始化A[i]=0 (i=1,2...n),即所有皇后都在第1列上;从i=1开始进行以下步骤。 (4)若A[i]=n,则进行检查:第i行和前i-1行是否在一列或者一条对角线上: ①若上述判断条件不成立,表示第i行和前i-1行之间不互相攻击,执行则i=i+1,准备进行下一个皇后位置的尝试。 ②若上述判断条件成立,表示第i行和前i-1行之间有冲突,第i皇后右移,即A[i]=A[i]+1;重复第(4)步。 ③A[i]n,表示己经没有位置可以安放第i行的皇后,将A[i]置为第1列,退回第i-1行,再考虑第i-1个皇后与之前皇后互不攻击的下一个位置;如果己经退到第0行,表示过程已经结束。 (5)若当前位置是在最后一行,即第n行,说明已经找到了n个皇后在棋盘上互不攻击的位置,将数组A[i]输出,将A[1 ]+1重复第C4)步,找出其他所有的布局。 例2[旅行商问题]:在这个问题中,给出一个n 顶点网络(有向或无向),要求找出一个包含所有n 个顶点的具有最小耗费的环路。任何一个包含网络中所有n 个顶点的环路被称作一个旅行(t o u r)。在旅行商问题中,要设法找到一条最小耗费的旅行。这是一个NP问题。 (NP问题:在一些算法中,时间的复杂度并不总是问题规模的多项式函数,例如在数学中利用克莱姆法则求解n阶线性方程组总共需要做(n2-1)n!次乘法运算。对问题的规模为n,存在一个多项式函数P(n)表示这个算法最坏的情况下的

文档评论(0)

yurixiang1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档