算法思想之分治递归策略
2011-09-27 15:45
621 查看
摘自 邹恒明《算法之道》
采取分治策略解决问题有三个步骤:
(1) 将问题分解为若干个小的子问题。每个子问题和大问题同型,但规模更小。
(2) 递归解决这些问题。
(3) 将子问题的解答合并,并获得大问题的解答。
第二步中“递归解决这些子问题”指的是按照同样的分治策略进行求解,即通过将这些子问题分解到更小的孙子问题来进行求解。就这样一直分解下去,直到分解出来的子问题简单到只用常数操作时间就可解决为止。而递归是彰显递归优势的放大器。如果没有递归,那么分治策略的效果不是没有就是微不足道。就像我们分治乘法运算,如果只分解一次,效率改善不足挂齿。
在分解到子问题规模达到微不足道的境界,子问题的就可以用常数时间来求得。然后我们反照递归顺序由低至上将子问题的解合并起来,逐级上推就构成原问题的解。
在分而治之的策略下,真正的工作也由上述三个步骤组成,即所有的工作分散至这三个地方:分解部分、递归部分和合并部分。而整个分而治之策略的时间复杂性也由这三项的时间复杂性之和构成。由于不断递归后,最后子问题将变得极为简单,能够轻而易举地解决,其解决的时间复杂性在整个策略中的比重微乎其微,可以忽略不计。因此,分而治之策略的真正成本实际上是由分解和合并两个部分构成,即到底有分解多少次,每次分解的子问题数到底是多少?到底要合并多少次,每次分解与合并需要多少时间?其中最为关键的是分解出来的子问题数、每个子问题的大小,以及分解和合并本身的时间成本。这些是决定分而治之策略是否奏效的决定因素。因此优良的分解合并策略就十分重要。
采取分治策略解决问题有三个步骤:
(1) 将问题分解为若干个小的子问题。每个子问题和大问题同型,但规模更小。
(2) 递归解决这些问题。
(3) 将子问题的解答合并,并获得大问题的解答。
第二步中“递归解决这些子问题”指的是按照同样的分治策略进行求解,即通过将这些子问题分解到更小的孙子问题来进行求解。就这样一直分解下去,直到分解出来的子问题简单到只用常数操作时间就可解决为止。而递归是彰显递归优势的放大器。如果没有递归,那么分治策略的效果不是没有就是微不足道。就像我们分治乘法运算,如果只分解一次,效率改善不足挂齿。
在分解到子问题规模达到微不足道的境界,子问题的就可以用常数时间来求得。然后我们反照递归顺序由低至上将子问题的解合并起来,逐级上推就构成原问题的解。
在分而治之的策略下,真正的工作也由上述三个步骤组成,即所有的工作分散至这三个地方:分解部分、递归部分和合并部分。而整个分而治之策略的时间复杂性也由这三项的时间复杂性之和构成。由于不断递归后,最后子问题将变得极为简单,能够轻而易举地解决,其解决的时间复杂性在整个策略中的比重微乎其微,可以忽略不计。因此,分而治之策略的真正成本实际上是由分解和合并两个部分构成,即到底有分解多少次,每次分解的子问题数到底是多少?到底要合并多少次,每次分解与合并需要多少时间?其中最为关键的是分解出来的子问题数、每个子问题的大小,以及分解和合并本身的时间成本。这些是决定分而治之策略是否奏效的决定因素。因此优良的分解合并策略就十分重要。
相关文章推荐
- 本文专注于<递归算法和分治思想>[胖虎学习算法系列]
- 五大算法思想:分治、动态规划、贪心、回溯和分支界定
- 分治算法思想解决找假硬币的问题
- 常用算法思想一(分治思想)
- 递归和分治思想4|八皇后问题 - 数据结构和算法34
- 五大算法基本思想—分治,动态规划,贪心,回溯,分支界限
- 动态规划算法与分治算法思想
- 分治算法思想解决找假硬币的问题
- 递归和分治思想4|八皇后问题 - 数据结构和算法34
- 求二维平面最近点对算法; 分治思想; 递归写的好精准,模仿ACM模板写的.;很多细节处理的很漂亮;
- 分治思想的几个算法:二分检索、快排、归并排序
- 算法分析——分治思想之合并排序
- <菜鸟学算法-A排序(分治的思想:归并排序)>
- 分治算法基本思想和典型例题
- 递归和分治思想2 - 数据结构和算法32
- 本文专注于<递归算法和分治思想>[胖虎学习算法系列]
- 递归和分治思想2 - 数据结构和算法32
- 算法之分治思想
- 算法设计与分析之分治思想
- 常用算法思想之:分治思想