算法思想系列--分治策略(Divide-Conquer-Combine)
分治策略(Divide-Conquer-Combine), 随机算法(Randomized Algorithms) 动态规划(Dynamic Programming), 贪心算法(Greedy Algorithms),摊还分析(Amortized Analysis),NP完全性(NP-Completeness),近似算法(Approximation Algorithms), , 回溯算法(back-track algorithm)
分治策略递归地求解一个问题,在每层递归中应用如下三个步骤:
(1) 分解(Divide)步骤将问题划分为一些子问题,子问题的形式与原问题一样,只是规划更小
(2) 解决(Conquer)步骤递归地求解出子问题,如果子问题的规划足够小,则停止递归,直接求解
(3) 合并(Combine)步骤将子问题的解组合成原问题的解。
7.1 理解递归
阶乘问题--> 尾递归(Tail Recursion)实现
迭代解决方案通常比递归解决方案更有效率(性能开销方面)
递归是程序设计中一个强有力的工具。
其一,有很多数学函数是递归定义的,如阶乘, 2阶Fibonacci数列,Ackerman函数等
其二,有很多数据结构本身固有的递归特性,他们的操作可递归地描述 如二叉树,广义表等
分治策略(Divide-Conquer-Combine), 随机算法(Randomized Algorithms) 动态规划(Dynamic Programming), 贪心算法(Greedy Algorithms),摊还分析(Amortized Analysis),NP完全性(NP-Completeness),近似算法(Approximation Algorithms), , 回溯算法(back-track algorithm)
分治策略递归地求解一个问题,在每层递归中应用如下三个步骤:
(1) 分解(Divide)步骤将问题划分为一些子问题,子问题的形式与原问题一样,只是规划更小
(2) 解决(Conquer)步骤递归地求解出子问题,如果子问题的规划足够小,则停止递归,直接求解
(3) 合并(Combine)步骤将子问题的解组合成原问题的解。
7.1 理解递归
阶乘问题--> 尾递归(Tail Recursion)实现
迭代解决方案通常比递归解决方案更有效率(性能开销方面)
递归是程序设计中一个强有力的工具。
其一,有很多数学函数是递归定义的,如阶乘, 2阶Fibonacci数列,Ackerman函数等
其二,有很多数据结构本身固有的递归特性,他们的操作可递归地描述 如二叉树,广义表等
第三,还有一类问题,虽然问题本身没有明显的递归结构,但用递归求解比迭代求解更简单,如:八皇后问题,Hanoi塔问题,字符串全排列,二分搜索
参考:
Recursion: https://en.wikipedia.org/wiki/Recursion
Recursion (computer science) https://en.wikipedia.org/wiki/Recursion_%28computer_science%29#Types_of_recursion
递归的种类: http://blog.chinaunix.net/uid-20341252-id-1702159.html