试题详情
- 简答题简述回溯法的基本思想,采用这种算法的关键是什么?
- 回溯法是一种有组织的系统化搜索问题解的技术,它是对穷举搜索的改进,其采用的 是“向前走,碰壁回头”思想。具体的说,首先要对问题进行分析,确定问题的所有可能解,即确定问题的解空间,然后沿着所确定的路线搜索向前搜索。在搜索过程中,对每一步得到的部分解进行判断,如果该部分解有可能构成一个完整解,说明这一步走得通,则继续向前走,也就是进一步构造问题解。否则,说明“此路不同”,则需要回退,找另一条路线再搜索,也就是回溯,从新的路线上继续构造问题的解。
由回溯法的求解过程可以看出,采用回溯法的关键是确定正确的解空间,即确定解的搜索范围,并确定搜索的路线,只有做到这两步,才可能有效地对问题解进行搜索。
例如,“给定一个正整数集合X={ x1, x2, …, xn }和一个正整数 y,求集合X的一个子集Y,使得Y中的元素之和等于y。”,这个问题可以采用回溯法来求解。其求解思路是:
从X集合中依次选取各元素并将其与Y中的元素相加,考察相加结果。具体做法是:
·初始子集Y为空,其元素和等于0;
·选取x1 ,将其与子集Y的元素和相加,检查结果:
若相加结果大于y,则放弃当前所选xi :
若X中还有后续元素,继续选取xi+1 再试;
否则,回溯:放弃xi之前一个选中的元素,继续向后选取;
若相加结果小于y,做Y=Y+xi,继续向后选取xi+1 再试;
若相加结果等于y,输出Y中的元素。 由于这个问题的解空间比较明确(求X的子集),因此,实现这个回溯算法的关键,是确定求满足条件的子集的思路确定对当前项xi取或舍的准则。即,确定对x1, x2, …, xn 求和的顺序以及判断当前和是否满足条件的准则。确定了这两个条件,这个回溯算法的搜索路线也就确定了。算法思路也就明确了。 关注下方微信公众号,在线模考后查看
热门试题
- 当你为解决某一问题而选择数据结构时,应从
- 设一棵二叉树的先序序列: A B D F
- 链栈与顺序栈相比有一个明显的优点,即()
- 在一棵深度为h的具有n个元素的二叉排序树
- 一棵深度为H的满k叉树有如下性质:第H层
- 数据元素及其关系在计算机存储;内的表示称
- 用邻接矩阵法存储一个图时,在不考虑压缩存
- 散列技术中的冲突指的是()。
- 对于长度为8的顺序存储结构的有序表,若采
- 在具有6个结点的无向简单图中,当边数最少
- 数据
- 含有3个2度结点和4个叶结点的二叉树可含
- 矩阵中的行列数往往是不相等的。
- n阶下三角矩阵,因为对角线的上方是同一个
- 空串与空格串的区别在于()。
- 设有n个关键字具有相同的Hash函数值,
- 在表长为n的链表中进行顺序查找,它的平均
- 下面程序段的时间复杂度是() for(i
- 对数列(25,84,21,47,15,2
- 在对一组记录(55,39,97,22,1