导图社区 算法设计与分析
这是一个关于算法设计与分析思维导图,包含递归算法、穷举法、分治法、回溯法、分支限界法、动态规划、贪心法各个算法的思想,之间的区别以及之间的联系等知识点。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
递归算法、 穷举法、 分治法、 回溯法、 分支限界法、 动态规划、 贪心法 各个算法的思想, 之间的区别 以及 之间的联系
递归算法
自我调用
函数调用自身解决问题
有明确的终止条件
分解问题
将问题分解为更小的子问题
子问题相互独立
递归树
可视化递归过程
展示递归调用层级
穷举法(暴力法/蛮力法)
简单直接
尝试所有可能的解
适用于问题规模较小的情况
时间复杂度高
解空间大时效率低
不适合大规模问题
完全搜索
检查每一个可能的解
确保找到最优解
分治法
将原问题分解为若干个规模较小的同类问题
递归求解
对分解后的每个子问题递归求解
合并结果
将子问题的解合并为原问题的解
适用性
适用于可以分解为独立子问题的问题
回溯法
试错思想
发现不满足条件时回退
状态空间树
用树结构表示解空间
每个节点代表问题的一个状态
剪枝优化
剔除不可能产生最优解的路径
提高搜索效率
应用场景
解决约束满足问题
如八皇后问题、图的着色问题
分支限界法
搜索策略
按照某种规则搜索解空间树
限界剪枝
用界限函数剪去不可能产生最优解的分支
活动选择
选择最优的活动进行
适用于调度问题
与回溯法的区别
分支限界法更注重于优化搜索过程
回溯法更注重于找到所有可行解
动态规划
状态转移方程
描述问题的最优解与子问题最优解之间的关系
重叠子问题
子问题被多次计算
使用记忆化技术存储子问题解
最优子结构
问题的最优解包含其子问题的最优解
股票买卖问题、背包问题
贪心法
局部最优选择
每一步都选择当前看起来最优的解
不回溯
一旦做出选择,不会改变
适用条件
问题具有贪心选择性质
贪心选择能产生全局最优解
最小生成树、哈夫曼编码
算法之间的区别与联系
区别
思想基础不同
递归基于函数自我调用
穷举法基于完全搜索
分治法基于分解与合并
回溯法基于试错与剪枝
分支限界法基于搜索策略与限界剪枝
动态规划基于状态转移与记忆化
贪心法基于局部最优选择
应用场景不同
穷举法适用于小规模问题
分治法适用于可以分解为独立子问题的问题
回溯法适用于约束满足问题
分支限界法适用于调度问题
动态规划适用于有重叠子问题和最优子结构的问题
贪心法适用于具有贪心选择性质的问题
联系
都是解决问题的策略
每种算法都旨在解决特定类型的问题
有交集的应用场景
某些问题可能可以用多种算法解决
相互启发
一种算法的思路可能启发另一种算法的改进
算法优化
通过组合不同算法的思想来优化解题过程