算法设计与分析回溯法哈密尔顿回路问题.docx

上传人:b****6 文档编号:3389331 上传时间:2022-11-22 格式:DOCX 页数:13 大小:166.02KB
下载 相关 举报
算法设计与分析回溯法哈密尔顿回路问题.docx_第1页
第1页 / 共13页
算法设计与分析回溯法哈密尔顿回路问题.docx_第2页
第2页 / 共13页
算法设计与分析回溯法哈密尔顿回路问题.docx_第3页
第3页 / 共13页
算法设计与分析回溯法哈密尔顿回路问题.docx_第4页
第4页 / 共13页
算法设计与分析回溯法哈密尔顿回路问题.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

算法设计与分析回溯法哈密尔顿回路问题.docx

《算法设计与分析回溯法哈密尔顿回路问题.docx》由会员分享,可在线阅读,更多相关《算法设计与分析回溯法哈密尔顿回路问题.docx(13页珍藏版)》请在冰豆网上搜索。

算法设计与分析回溯法哈密尔顿回路问题.docx

算法设计与分析回溯法哈密尔顿回路问题

 

回溯算法的应用

 

课程名称:

算法设计与分析

院系:

学生姓名:

学号:

专业班级:

指导教师:

 

年月日

回溯算法的应用

摘要:

回溯法是在包含问题的所有解的解空间树(或森林)中,按照深度优先的策略,从根结点出发搜索解空间树。

算法搜索至解空间树的任一结点时,总是先判断该结点是否满足问题的约束条件。

如果满足进入该子树,继续按深度优先的策略进行搜索。

否则,不去搜索以该结点为根的子树,而是逐层向其祖先结点回溯。

其实回溯法就是对隐式图的深度优先搜索算法。

回溯法是一个既带有系统性又带有跳跃性的的搜索算法。

它在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。

算法搜索至解空间树的任一结点时,总是先判断该结点是否肯定不包含问题的解。

如果肯定不包含,则跳过对以该结点为根的子树的系统搜索,逐层向其祖先结点回溯。

否则,进入该子树,继续按深度优先的策略进行搜索。

回溯法的优点在于其程序结构明确,可读性强,易于理解,而且通过对问题的分析可以大大提高运行效率。

回溯法在用来求问题的所有解时,要回溯到根,且根结点的所有子树都已被搜索遍才结束。

而回溯法在用来求问题的任一解时,只要搜索到问题的一个解就可以结束。

这种以深度优先的方式系统地搜索问题的解的算法称为回溯法,它适用于解一些组合数较大的问题。

这就是以深度优先的方式系统地搜索问题解的回溯算法,它适用于解决一些类似n皇后问题等求解方案问题,也可以解决一些最优化问题。

关键词:

回溯法解空间树深度优先搜索

 

 

第1章绪论

1.1回溯算法的背景知识

回溯算法是尝试搜索算法中最为基本的算法,在递归算法中,其存在的意义是在递归知道可解的最小问题后,逐步返回原问题的过程。

实际上是一个类似于枚举的搜索尝试方法,他的主题思想是在搜索尝试的过程中寻找问题的解,当发现不满足条件时就回溯返回,尝试别的路径。

简单的说就是:

从问题的某一种初始状态出发,依次搜寻每一种可能到达的情况,当走到这条路的“尽头”时,回过头到上一个情况,看这个情况是否还有没有走过的路,依次进行下去,直到遍历完所有的情况。

回溯法实际上是一种深度优先搜索的方式。

对于回溯法解决的问题,通常将其解空间组织成图或者树的形式。

对于用回溯法求解的问题,首先要将问题进行适当的转化,得出状态空间树。

这棵树的每条完整路径都代表了一种解的可能。

通过深度优先搜索这棵树,枚举每种可能的解的情况;从而得出结果。

但是,回溯法中通过构造约束函数,可以大大提升程序效率,因为在深度优先搜索的过程中,不断的将每个解与约束函数进行对照从而删除一些不可能的解,这样就不必继续把解的剩余部分列出从而节省部分时间。

1.2回溯法的前景意义

在做题时,有时会遇到这样一类题目,它的问题可以分解,但是又不能得出明确的动态规划或是递归解法,此时可以考虑用回溯法解决此类问题。

回溯法的优点在于其程序结构明确,可读性强,易于理解,而且通过对问题的分析可以大大提高运行效率。

通过运用回溯法,可以解决很多问题,譬如我们所熟知的“八皇后问题”、“0/1背包问题”,这只是在教学阶段中的运用,在实际运用中回溯法也能起到很大的作用。

回溯法适用于解决难以归纳一般规律解法的问题,其适用范围广,灵活性大,在解一些列举方法的问题时尤其可用。

但是,其缺点也是明显的,即时间复杂度较大;因此在采用时我们应该因情况的不同而做出不同的选择。

第2章回溯算法的理论知识

2.1回溯算法的基本思想

回溯法是在包含问题的所有解的解空间树(或森林)中,按照深度优先的策略,从根结点出发搜索解空间树。

算法搜索至解空间树的任一结点时,总是先判断该结点是否满足问题的约束条件。

如果满足进入该子树,继续按深度优先的策略进行搜索。

否则,不去搜索以该结点为根的子树,而是逐层向其祖先结点回溯。

其实回溯法就是对隐式图的深度优先搜索算法。

2.2回溯算法设计过程

(1)确定问题的解空间

应用回溯法解问题时,首先应明确定义问题的解空间。

问题的解空间应至少包含问题的一个(最优)解。

(2)确定结点的扩展规则,如每个皇后在一行中的不同位置移动,而象棋中的马只能走“日”字等。

(3)搜索解空间

回溯算法从开始结点(根结点)出发,以深度优先的方式搜索整个解空间。

这个开始结点就成为一个活结点,同时也成为当前的扩展结点。

在当前的扩展结点处,搜索向纵深方向移至一个新结点。

这个新结点就成为一个新的活结点,并成为当前扩展结点。

如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。

此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。

回溯法即以这种工作方式递归地在解空间中搜索,直至找到所要求的解或解空间中已没有活结点时为止。

2.3回溯算法框架

(1)问题框架

设问题的解是一个n维向量(a1,a2,.....,an),约束条件是ai(i=1,2,3,....,n)之间满足某种条件,记为f(ai)。

(2)非递归回溯框架

inta[n],i;

初始化数组a[];

i=1;

While(i>0(有路可走))and([未到达目标])//还未回溯到头

{if(i>n)//搜索到叶结点

搜索到一个解,输出;

else//正在处理第i个元素

{a[i]第一个可能的值;

while(a[i]在不满足约束条件且在搜索空间内)

a[i]下一个可能的值;

if(a[i]在搜索空间内)

{标识占用的资源;

i=i+1;}//扩展下一个结点

else

{清理所占的状态空间;//回溯

i=i-1;}

}

}

(3)递归算法框架

回溯法是对解空间的深度优先搜索,在一般情况下用递归函数来实现回溯法比较简单,其中i为搜索深度,框架如下:

inta[n];

try(inti)

{if(i>n)

输出结果;

else

for(j=下界;j<=上界;j++)

if(f(j))

{a[i]=j;

...

try(i+1);

回溯前的清理工作(如a[i]置空值等);

}

}

2.4回溯算法的一般性描述

回溯法的一般描述

可用回溯法求解的问题P,通常要能表达为:

对于已知的由n元组(x1,x2,…,xn)组成的一个状态空间E={(x1,x2,…,xn)∣xi∈Si,i=1,2,…,n},给定关于n元组中的一个分量的一个约束集D,要求E中满足D的全部约束条件的所有n元组。

其中Si是分量xi的定义域,且|Si|有限,i=1,2,…,n。

我们称E中满足D的全部约束条件的任一n元组为问题P的一个解。

解问题P的最朴素的方法就是枚举法,即对E中的所有n元组逐一地检测其是否满足D的全部约束,若满足,则为问题P的一个解。

但显然,其计算量是相当大的。

我们发现,对于许多问题,所给定的约束集D具有完备性,即i元组(x1,x2,…,xi)满足D中仅涉及到x1,x2,…,xi的所有约束意味着j(j<=i)元组(x1,x2,…,xj)一定也满足D中仅涉及到x1,x2,…,xj的所有约束,i=1,2,…,n。

换句话说,只要存在0≤j≤n-1,使得(x1,x2,…,xj)违反D中仅涉及到x1,x2,…,xj的约束之一,则以(x1,x2,…,xj)为前缀的任何n元组(x1,x2,…,xj,xj+1,…,xn)一定也违反D中仅涉及到x1,x2,…,xi的一个约束,n≥i≥j。

因此,对于约束集D具有完备性的问题P,一旦检测断定某个j元组(x1,x2,…,xj)违反D中仅涉及x1,x2,…,xj的一个约束,就可以肯定,以(x1,x2,…,xj)为前缀的任何n元组(x1,x2,…,xj,xj+1,…,xn)都不会是问题P的解,因而就不必去搜索它们、检测它们。

回溯法正是针对这类问题,利用这类问题的上述性质而提出来的比枚举法效率更高的算法。

第3章哈密尔顿问题

3.1问题描述

回溯搜索解哈密尔顿问题:

哈密尔顿回路就是指经过图(有向图或无向图)中所有顶点一次且仅一次的通路。

3.2问题分析

用回溯算法遍历哈密尔顿回路中的所有顶点(每个顶点遍历一次且仅一次),回溯法是采用深度优先遍历的算法,对解空间树进行遍历。

在求哈密尔顿回路时,要用一个二维数组存储顶点的邻接矩阵,并且要对已经访问过的顶点进行标记。

3.3算法设计

(1)算法分析

用回溯法求解哈密尔顿回路问题,首先要画出问题的解空间树,该解空间树是一棵最大度是n的树(其中n为图中的顶点数),树中只有第一个结点的度为n,其余的结点的度都为n-1(该结点不用与其自身相连)。

在编写算法时,可以通过判断该边在图的邻接矩阵中的值来剪枝,如果其值不是1,则说明该边不存在,则剪枝不用继续搜索。

由于在求图的哈密尔顿回路时,走过的顶点不能再重复走,所以要对已经遍历过的顶点做一个标记,如果在搜索时找到的是一个带有标记的顶点,那么该路径也是不可行的,应剪去。

(2)实例分析

创建一个有6个顶点,9条边的连通图,如下图所示,求解哈密尔顿回路的所有解。

图3-1哈密尔顿回路

此实例共有6种解,分别为:

回路1:

126534

回路2:

126543

回路3:

132654

回路4:

134562

回路5:

143562

回路6:

145623

(3)数据结构

1>在求解哈密尔顿回路问题时,需要用graph[][]二维数组存储边的邻接矩阵。

2>数组x[]存储回路的解。

(4)流程图

图3-2哈密尔顿回路算法设计主函数流程图

图3-3哈密尔顿回路算法设计hamiltonian()函数流程图

图3-4哈密尔顿回路算法设计nextvalue()函数流程图

3.4测试结果与分析

1、有哈密尔顿回路测试结果:

图3-5有哈密尔顿回路连通图边的创建

创建6个顶点,9条边的连通图。

在提示的信息下输入顶点号,以便创建边。

图3-6有哈密尔顿回路连通图的解

如图3.5以及图3.6所示,创建有6个顶点,9条边的有哈密尔顿回路的连通图,则哈密尔顿回路的所有解共有6种。

回溯算法是按照深度优先的原则对哈密尔顿回路连通图进行遍历,因此在一个具有哈密尔顿回路的连通图中会有多种不同的回路。

2、无哈密尔顿回路测试结果:

 

 

图3-7无哈密尔顿回路连通图的解

创建5个顶点,6条边的连通图,输入不同顶点号以创建边,在第6条边创建完后,从图3-7中可以看到没有输出解,这是由于创建的连通图中没有哈密尔顿回路,所以没有解答案。

 

第4章结论

通过本次课程设计,我对算法设计与分析的基础有了更清楚的认识,基本掌握了回溯算法求解一般哈密尔顿回路的基本思想以及编程原理,提高了程序开发能力,切实体会到了算法设计与分析在编程中的指导作用,对提高自身的编程能力以及项目制作能力有很大的意义。

在这次的实例求解哈密尔顿回路问题,我对回溯法求解问题的思想有了进一步的理解,也对回溯算法理解的更加透彻。

由于对哈密尔顿回路问题的知识了解的不多,对程序设计有很大的阻碍,因此,只能通过上网查询,以及向同学询问,并且多加思考,才完成了本次的程序设计。

利用回溯算法求解哈密尔顿回路问题,需建立在连通图的基础上,哈密尔顿回路就是遍历图中的所有顶点,但要求每个顶点只能经过一次且仅一次。

回溯算法是在解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。

利用递归算法,使大规模问题逐步小化为小规模问题,程序设计框架更加清晰,简单,算法设计也更加明了。

回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。

回溯算法的基本思想是:

从一条路往前走,能进则进,不能进则退回来,换一条路再试。

用回溯算法解决问题的一般步骤为:

1、定义一个解空间,它包含问题的解。

2、利用适于搜索的方法组织解空间。

3、利用深度优先法搜索解空间。

4、利用限界函数避免移动到不可能产生解的子空间。

问题的解空间通常是在搜索问题的解的过程中动态产生的,这是回溯算法的一个重要特性。

具体来说:

确定了解空间的组织结构后,回溯法就从开始结点(根结点)出发,以深度优先的方式搜索整个解空间。

这个开始结点就成为一个活结点,同时也成为当前的扩展结点。

在当前的扩展结点处,搜索向纵深方向移至一个新结点。

这个新结点就成为一个新的活结点,并成为当前扩展结点。

如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。

此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。

回溯法即以这种工作方式递归地在解空间中搜索,直至找到所要求的解或解空间中已没有活结点时为止。

参考文献

[1]算法设计与分析(第二版)吕国英主编

 

指导教师评语:

1、文档:

a、内容:

不完整□完整□详细□

b、方案设计:

较差□合理□非常合理□

c、实现:

未实现□部分实现□全部实现□

d、文档格式:

不规范□基本规范□规范□

2、答辩:

a、未能完全理解题目,答辩情况较差□

b、部分理解题目,部分问题回答正确□

c、理解题目较清楚,问题回答基本正确□

d、理解题目透彻,问题回答流利□

文档成绩:

,占总成绩比例:

40%

答辩成绩:

,占总成绩比例:

60%

总成绩:

 

指导教师签字:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1