回溯法——深度优先搜索
简单概述:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。
基本思想类同于:图的深度优先搜索,二叉树的后序遍历
回溯法的实现方法有两种:递归和递推(也称迭代)。一般来说,一个问题两种方法都可以实现,只是在算法效率和设计复杂度上有区别。
def age(n):
if n == 1:
return 18
return age(n –1) + 2
print(age(5))
#age(5) = age(4) +2 第一次进入
#age(4) = age(3) +2 第二次进入
#age(3) = age(2) +2 第三次进入
#age(2) = age(1) +2 第四次进入
#age(1) = 18 第五次进入,此时达到结束的条件,递归终止
这是一个典型的递归递推算法,它的每一次执行都是基于上一次的结果。
def fx(n):
print("递归进入第",n,"层")
if n == 3:
return
fx(n + 1)
print("递归退出第",n,"层")
fx(1)
print("程序结束")
上述是一个关于递归回溯算法的实例,递归必须要有一个明确的结束条件, 否则就变成死循环导致栈溢出,都是以“if”语句作为结束条件的。每递归一次要解决一些事情,否则就失去了递归的意义。
相关推荐
贪婪算法-回溯-深度优先搜索.docx
。。。
回溯法解决01背包问题:子集树深度优先搜索
回溯法,亦称试除法,是一种通过试错来搜索所有解的算法,直到找到所需的解为止。它采用了一种“深度优先”的搜索策略,用递归的方式来遍历所有可能的候选解,从而找到满足特定条件的解。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会丢弃该解,即回溯然后在剩余的解空间中继续搜索。组合优化问题涉及的是从有限个元素中寻找最优解的问题。这类问题的一个显著特点是在解空间中进行穷举搜索,而回溯法是解决此类问题的一个非常有效的工具。组合优化问题包括但不限于旅行商问题(TSP)、装箱问题、图着色问题等。
贪婪算法-回溯-深度优先搜索.pdf
。。。
c++深度优先搜索的回溯法实现多集合矩阵互斥问题
给定1个1000行×20列的0-1矩阵,对于该矩阵的任意1列,其中值为1的元素的数量不超过10%。设有两个非空集合A和B,每个集合由矩阵的若干列组成。集合A和B互斥是指对于矩阵的任意一行,同时满足下列2个条件:1)若A中有一个或多个元素在这一行上的值是1,则B中的元素在这一行全部是0;2)若B中有一个或多个元素在这一行上的值是1,则A中的元素在这一行全部是0。请你设计一个算法,找出集合A、B和C,满足:1)A、B、C两两互斥,且2)A、B和C包含的列的总数最大。
算法分析之回溯法算法框架课件
回溯法的算法框架 具有限界函数的深度优先生成法称为回溯法。 运用回溯法解题通常包含三个步骤 例如,对于有n种可选物品的0-1背包问题,其解空间由长度为n的0-1向量组成



