- 数据结构与算法
- DSA - 首页
- DSA - 概述
- DSA - 环境搭建
- DSA - 算法基础
- DSA - 渐进分析
- 数据结构
- DSA - 数据结构基础
- DSA - 数据结构和类型
- DSA - 数组数据结构
- 链表
- DSA - 链表数据结构
- DSA - 双向链表数据结构
- DSA - 循环链表数据结构
- 栈与队列
- DSA - 栈数据结构
- DSA - 表达式解析
- DSA - 队列数据结构
- 搜索算法
- DSA - 搜索算法
- DSA - 线性搜索算法
- DSA - 二分搜索算法
- DSA - 插值搜索
- DSA - 跳跃搜索算法
- DSA - 指数搜索
- DSA - 斐波那契搜索
- DSA - 子列表搜索
- DSA - 哈希表
- 排序算法
- DSA - 排序算法
- DSA - 冒泡排序算法
- DSA - 插入排序算法
- DSA - 选择排序算法
- DSA - 归并排序算法
- DSA - 希尔排序算法
- DSA - 堆排序
- DSA - 桶排序算法
- DSA - 计数排序算法
- DSA - 基数排序算法
- DSA - 快速排序算法
- 图数据结构
- DSA - 图数据结构
- DSA - 深度优先遍历
- DSA - 广度优先遍历
- DSA - 生成树
- 树数据结构
- DSA - 树数据结构
- DSA - 树的遍历
- DSA - 二叉搜索树
- DSA - AVL树
- DSA - 红黑树
- DSA - B树
- DSA - B+树
- DSA - 伸展树
- DSA - 字典树 (Trie)
- DSA - 堆数据结构
- 递归
- DSA - 递归算法
- DSA - 使用递归实现汉诺塔
- DSA - 使用递归实现斐波那契数列
- 分治法
- DSA - 分治法
- DSA - 最大最小问题
- DSA - Strassen矩阵乘法
- DSA - Karatsuba算法
- 贪心算法
- DSA - 贪心算法
- DSA - 旅行商问题 (贪心算法)
- DSA - Prim最小生成树算法
- DSA - Kruskal最小生成树算法
- DSA - Dijkstra最短路径算法
- DSA - 地图着色算法
- DSA - 分数背包问题
- DSA - 带截止期限的作业排序
- DSA - 最优合并模式算法
- 动态规划
- DSA - 动态规划
- DSA - 矩阵链乘法
- DSA - Floyd-Warshall算法
- DSA - 0-1背包问题
- DSA - 最长公共子序列算法
- DSA - 旅行商问题 (动态规划)
- 近似算法
- DSA - 近似算法
- DSA - 顶点覆盖算法
- DSA - 集合覆盖问题
- DSA - 旅行商问题 (近似算法)
- 随机化算法
- DSA - 随机化算法
- DSA - 随机化快速排序算法
- DSA - Karger最小割算法
- DSA - Fisher-Yates洗牌算法
- DSA 有用资源
- DSA - 问答
- DSA - 快速指南
- DSA - 有用资源
- DSA - 讨论
DSA - 回溯算法
回溯算法是一种问题求解方法,它尝试所有可能的解决方案,并选择最佳或所需的解决方案。通常,它用于解决具有多个解决方案的问题。术语“回溯”表明,对于给定的问题,如果当前解决方案不合适,则将其消除,然后回溯以尝试其他解决方案。
什么时候使用回溯算法?
回溯算法可用于以下问题:
问题有多个解决方案或需要找到所有可能的解决方案。
当给定问题可以分解成与原始问题相似的较小子问题时。
如果问题有一些约束或规则必须由解决方案满足。
回溯算法如何工作?
回溯算法探索各种路径以找到将我们带到解决方案的序列路径。沿着这些路径,它建立一些小的检查点,如果找不到可行的解决方案,问题可以从这些检查点回溯。此过程持续到找到最佳解决方案。
在上图中,绿色是起点,蓝色是中间点,红色是没有可行解决方案的点,灰色是最终解决方案。
当回溯算法到达解决方案的结尾时,它会检查这条路径是否是解决方案。如果是解决方案路径,则返回该路径;否则,它会回溯到前一步以找到解决方案。
算法
以下是回溯算法:
1. Start 2. if current_position is goal, return success. 3. else 4. if current_position is an end point, return failed. 5. else-if current_position is not end point, explore and repeat above steps. 6. Stop
回溯算法的复杂度
通常,回溯算法的时间复杂度是指数级的 (O(kn))。在某些情况下,观察到其时间复杂度是阶乘的 (O(N!))。
回溯问题的类型
回溯算法应用于某些特定类型的问题。如下所示:
判定问题 - 用于找到问题的可行解。
优化问题 - 用于找到可以应用的最佳解决方案。
枚举问题 - 用于找到问题的所有可行解的集合。
回溯算法的例子
以下列表显示了回溯算法的示例:
广告