我想学习回溯算法。有人可以教我一些吗?我尝试从一些网站学习,但没有成功。所以,有人可以教我吗?谢谢!
虽然不依赖于特定编程语言,this 教程很好,并提供了几个例子,可以提供必要的直觉。
话虽如此,回溯背后的思想并不难以理解。回溯算法本质上像执行暴力搜索一样探索所有解空间,但是(这使其更有效率),它在意识到一个部分解不可行时立即回溯。
一个例子
考虑这个著名的eight queens problem的部分解。
前四列中的皇后已经被放置,但最后一列在一个无效的方格中。暴力解决方案会继续为其余列放置皇后,而忽视这个部分解决方案不管如何增强都将是无效的事实。
回溯算法会更加"聪明":它会意识到第四个皇后放置不正确,并"回到"考虑其他方格。
《计算机算法基础》一书中有一章非常详细地介绍了回溯算法。但是,如果您不熟悉正式的算法文本和数据结构,可能会在阅读此书时遇到一些问题。例如,如果您不熟悉复杂度分析或者不知道什么是树,那么您需要从头开始阅读这本书,直接跳转到回溯算法章节可能并不会有太大的帮助。