递归
- 递归=自上而下分解+自下而上求值&合并
- 子问题与原问题完全相同,数量规模不同
- 系统栈实现
- n越大,递归深度越深
- 递归是有条件的,无条件递归调用会成为死循环
- 简单示例:简单选择排序和冒泡排序
- 可以处理查找问题(二分查找/折半查找,查找的序列是有序的)
分治算法
- 子问题相互独立,不独立的话就用动态规划
- 过程=分解+求解+合并(devide+conquer+combine)
- 分治法与递归的区别:许多分治法算法都用递归实现,但是也可以用非递归实现。
- 分治法是求解问题的策略,递归是实现求解算法的技术
- 示例:快速排序和归并排序
蛮力法
- 示例:简单选择排序和冒泡排序
- 蛮力法:分为两种,直接采用穷举,第二类是在穷举中引用递归
贪心法:
- 每一步决策的准则:最优量度标准/贪心准则
- 能够用贪心法求解的问题的性质:贪心选择性质,最优子结构性质
- 贪心选择性质是与动态规划的主要区别
- 最优子结构:贪心法,动态规划
动态规划
- 只需要多项式时间复杂度,比回溯法、暴力法等效率高,但并不是任何问题都适合采用动态规划法求解。
- 分治:子问题独立,动态规划:子问题重叠
- 贪心法与动态规划的差别:贪心法做出不可回溯的决策,还要考察每个最优决策序列中是否包含一个最优子序列。
- 采用动态规划求解的问题需要的三个性质:最优性原理(具有最优子结构),无后效性,有重叠子问题
- 备忘录方法是动态规划方法的变形,备忘录方法的递归方式:自顶向下,动态规划:自底向上
回溯法
- 两种方式保存搜索过的节点:自定义栈,递归方法
递归
1.任何一个递归过程都可以转换成非递归过程。 T
https://blog.csdn.net/qq_43733499/article/details/103934690
https://www.icourse163.org/learn/XMU-1205800806?tid=1465424463#/learn/content?type=detail&id=1244420489&cid=1268491093
https://blog.csdn.net/Balance_1/article/details/108836599
动态规划
1.如果一个问题可以用动态规划算法解决,则总是可以在多项式时间内解决的。F
最优二叉搜索树的根结点一定存放的是搜索概率最高的那个关键字。F
用动态规划而非递归的方法去解决问题时,关键是将子问题的计算结果保存起来,使得每个不同的子问题只需要被计算一次。子问题的解可以被保存在数组或哈希散列表中。T
2-5 动态规划的基本要素为____。
(2分)
A. 最优子结构性质与贪心选择性质
B. 重叠子问题性质与贪心选择性质
C. 最优子结构性质与重叠子问题性质
D. 预排序与递归调用