你好,我是zhenguo
近期星球里练习回溯相关题目,这是今天我总结出的回溯算法七讲.pdf,欢迎球友们参考学习。
下面是前两节:
1 什么是回溯?
回溯是一种算法技术,常用于组合问题中有技巧地穷尽所有可能组合的技术。
它一步一步递归地解决问题,并在任何时间点删除那些不满足问题约束的解决方案。
它是一种精练的暴力方法,可以尝试所有可能的解决方案,并从中选择最好的解决方案。
回溯法通常用于存在多个可行解的情况。
回溯一词意味着——如果当前的解不合适,那么消除它,回溯(返回)并检查其他解决方案。
2 回溯是如何工作的?
在任何回溯问题中,该算法都试图找到一条有中间检查点可行解的路径。如果它们不能导致可行的解决方案,问题可以从检查点回溯到另一条路径来寻找解。
考虑以下示例:
S
是问题的出发点。
我们从S
开始,通过中间点I1
找到解S1
。
但是,我们发现解S1
不是我们问题的可行解。
因此,我们从S1
回溯(返回),回到I1
,回到S
,然后检查可行解S2
。
这个过程一直持续到我们找到一个可行的解。
在这里,S1
和S2
不是可行解。
根据我们的例子,只有S3
是一个可行解。
当我们看这个例子时,可以看到我们遍历所有可能的组合,直到得到可行的解。
这就是为什么我们说回溯是一种暴力算法技术。
上述问题的树表示称为“空间状态树”。它表示给定问题的所有可能状态(解或非解)。
下载pdf和学习更多章节,欢迎加入星球:
长按二维码,查看星球
点击阅读原文,学习完整教程