双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

回溯法——深度优先搜索

2007向凤盏 2007向凤盏 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

简单概述:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。

基本思想类同于:图的深度优先搜索,二叉树的后序遍历

回溯法的实现方法有两种:递归和递推(也称迭代)。一般来说,一个问题两种方法都可以实现,只是在算法效率和设计复杂度上有区别。

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

。。。

苦茶子12138

回溯法解决01背包问题:子集树深度优先搜索

回溯法,亦称试除法,是一种通过试错来搜索所有解的算法,直到找到所需的解为止。它采用了一种“深度优先”的搜索策略,用递归的方式来遍历所有可能的候选解,从而找到满足特定条件的解。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会丢弃该解,即回溯然后在剩余的解空间中继续搜索。组合优化问题涉及的是从有限个元素中寻找最优解的问题。这类问题的一个显著特点是在解空间中进行穷举搜索,而回溯法是解决此类问题的一个非常有效的工具。组合优化问题包括但不限于旅行商问题(TSP)、装箱问题、图着色问题等。

DataWizardess

贪婪算法-回溯-深度优先搜索.pdf

。。。

苦茶子12138

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包含的列的总数最大。

Eric倾

算法分析之回溯法算法框架课件

回溯法的算法框架 具有限界函数的深度优先生成法称为回溯法。 运用回溯法解题通常包含三个步骤 例如,对于有n种可选物品的0-1背包问题,其解空间由长度为n的0-1向量组成

xiaoyao316
评论
收藏 已收藏
分享
返回顶部
2007向凤盏
42python 124 成员 589 内容