回溯算法的应用

  • 格式:doc
  • 大小:2.67 MB
  • 文档页数:17

回溯算法的应用 课程名称: 算法设计与分析 院 系: 计算机科学与信息工程学院 学生姓名: *** 学 号: ********* 专业班级: 计算机科学与技术(信息技术)11-1 指导教师: ***

2013年12月27日 回溯算法的应用 摘 要:回溯法是一个既带有系统性又带有跳跃性的的搜索算法。它在包含问题的所有

解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,总是先判断该结点是否肯定不包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的系统搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按深度优先的策略进行搜索。回溯法在用来求问题的所有解时,要回溯到根,且根结点的所有子树都已被搜索遍才结束。而回溯法在用来求问题的任一解时,只要搜索到问题的一个解就可以结束。这种以深度优先的方式系统地搜索问题的解的算法称为回溯法,它适用于解一些组合数较大的问题。 在做题时,有时会遇到这样一类题目,它的问题可以分解,但是又不能得出明确的动态规划或是递归解法,此时可以考虑用回溯法解决此类问题。回溯法是尝试搜索算法中最为基本的一种算法,它的优点在于其程序结构明确,可读性强,易于理解,而且通过对问题的分析可以大大提高运行效率。 回溯算法也叫试探法,实际上是一个类似枚举的搜索尝试方法,是一种系统地搜索问题的解的方法。它的主要思想是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。

关键词:回溯搜索 全排列 最优化问题 结点 目 录 第1章 绪论........................................................................................................ 1 1.1 回溯算法的背景知识 .................................................................................... 1 1.2 回溯法的前景意义 ........................................................................................ 1 第2章 回溯算法的理论知识 ........................................................................... 2 2.1 问题的解最优化问题 .................................................................................... 2 2.2 回溯算法的一般性描述 ................................................................................ 2 第3章 全排列问题 ......................................................................................... 4 3.1 问题描述......................................................................................................... 4 3.2 问题分析......................................................................................................... 4 3.3 算法设计......................................................................................................... 4 3.4 测试结果与分析 ............................................................................................ 6 第四章 最优化问题 ........................................................................................... 7 4.1 问题描述......................................................................................................... 7 4.2 问题分析......................................................................................................... 7 4.3 算法设计......................................................................................................... 7 4.4 测试结果与分析 ............................................................................................ 9 第5章 结论......................................................................................................10 参考文献 ..............................................................................................................10 第 1 页 共 17 页 1

第1章 绪论 1.1 回溯算法的背景知识 回溯算法是尝试搜索算法中最为基本的算法,在递归算法中,其存在的意义是在递归知道可解的最小问题后,逐步返回原问题的过程。实际上是一个类似于枚举的搜索尝试方法,他的主题思想是在搜索尝试的过程中寻找问题的解,当发现不满足条件时就回溯返回,尝试别的路径 简单的说就是:从问题的某一种初始状态出发,依次搜寻每一种可能到达的情况,当走到这条路的“尽头”时,回过头到上一个情况,看这个情况是否还有没有走过的路,依次进行下去,直到遍历完所有的情况。 回溯法实际上是一种深度优先搜索的方式。对于回溯法解决的问题,通常将其解空间组织成图或者树的形式。对于用回溯法求解的问题,首先要将问题进行适当的转化,得出状态空间树。这棵树的每条完整路径都代表了一种解的可能。通过深度优先搜索这棵树,枚举每种可能的解的情况;从而得出结果。但是,回溯法中通过构造约束函数,可以大大提升程序效率,因为在深度优先搜索的过程中,不断的将每个解与约束函数进行对照从而删除一些不可能的解,这样就不必继续把解的剩余部分列出从而节省部分时间。

1.2 回溯法的前景意义 在做题时,有时会遇到这样一类题目,它的问题可以分解,但是又不能得出明确的动态规划或是递归解法,此时可以考虑用回溯法解决此类问题。回溯法的优点在于其程序结构明确,可读性强,易于理解,而且通过对问题的分析可以大大提高运行效率。 通过运用回溯法,可以解决很多问题,譬如我们所熟知的“全排列”、“最优化问题”,这只是在教学阶段中的运用,在实际运用中回溯法也能起到很大的作用。回溯法适用于解决难以归纳一般规律解法的问题,其适用范围广,灵活性大,在解一些列举方法的问题时尤其可用。但是,其缺点也是明显的,即时间复杂度较大;因此在采用时应该因情况的不同而做出不同的选择。 第 2 页 共 17 页 2

第2章 回溯算法的理论知识 2.1 问题的解最优化问题 对于最优化问题。 一个有趣的高精度数据:构造一个尽可能大的数,使其从高到低满足前一位能被1整除,前2位能被2整除,„„,前n位能被n整除。 记高精度数据为a1,a2,„,an,a1能被1整除且(a1*10+a2)能被2整除且„„(a1*10^n-1+a2*10^n-2+„an)能被n整除;求最大的这样的数。 此数只能用从高位到低位逐位尝试,失败回溯的算法策略求解,生成的高精度数据用数组从高位到低位存储,1号元素开始存储最高位。此数的大小无法估计不妨为数组开辟100个空间。 算法中数组A为当前求解的高精度数据的暂存处,数组B为当前最大的满足条件的数, 算法的首位A[1](最高位)从1开始枚举。以后各位从0开始枚举。所以求解出的满足条件的数据之间只须比较数就能确定大小,n为当前满足条件的最大数据的位数,i为当前满足条件数据的位数,当i>=n就认为找到了更大的解。当i>n不必解释,位数多数据一定大;i=n时,由于尝试是由小到大进行的,虽然位数相等,但后来满足条件的数据一定比前面的大。

2.2 回溯算法的一般性描述 回溯法的一般描述 可用回溯法求解的问题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元组逐一地检测其