试题详情
- 简答题简述回溯法的基本思想,采用这种算法的关键是什么?
- 回溯法是一种有组织的系统化搜索问题解的技术,它是对穷举搜索的改进,其采用的 是“向前走,碰壁回头”思想。具体的说,首先要对问题进行分析,确定问题的所有可能解,即确定问题的解空间,然后沿着所确定的路线搜索向前搜索。在搜索过程中,对每一步得到的部分解进行判断,如果该部分解有可能构成一个完整解,说明这一步走得通,则继续向前走,也就是进一步构造问题解。否则,说明“此路不同”,则需要回退,找另一条路线再搜索,也就是回溯,从新的路线上继续构造问题的解。
由回溯法的求解过程可以看出,采用回溯法的关键是确定正确的解空间,即确定解的搜索范围,并确定搜索的路线,只有做到这两步,才可能有效地对问题解进行搜索。
例如,“给定一个正整数集合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的元素都是6个字符组成的串,行
- 二叉排序树的查找长度至多为log
- 在什么情况下用顺序表比链表好?
- 栈是实现过程和函数等子程序所必需的结构。
- 研究数据结构就是研究()。
- 图G的生成树是该图的一个极小连通子图
- 折半查找法适用于()。
- 在顺序表中,等概率情况下,插入和删除一个
- 算法的特性包含输入、输出、()、确定性和
- 若对一棵二叉树从0开始进行结点编号,并按
- 哈夫曼编码
- 希尔排序
- 在对一组记录(40,24,82,9,1,
- 在一个单向链表中p所指结点之后插入一个s
- 设广义表((a,b,c)),则将c分离出
- 祖先
- 度数为0的结点,即没有子树的结点叫作()
- 在树的概念中,树中某结点的直接前驱称为该