您的位置:首页 > 其它

算法思想之分治递归策略

2011-09-27 15:45 621 查看
摘自 邹恒明《算法之道》

采取分治策略解决问题有三个步骤:

(1) 将问题分解为若干个小的子问题。每个子问题和大问题同型,但规模更小。

(2) 递归解决这些问题。

(3) 将子问题的解答合并,并获得大问题的解答。

第二步中“递归解决这些子问题”指的是按照同样的分治策略进行求解,即通过将这些子问题分解到更小的孙子问题来进行求解。就这样一直分解下去,直到分解出来的子问题简单到只用常数操作时间就可解决为止。而递归是彰显递归优势的放大器。如果没有递归,那么分治策略的效果不是没有就是微不足道。就像我们分治乘法运算,如果只分解一次,效率改善不足挂齿。

在分解到子问题规模达到微不足道的境界,子问题的就可以用常数时间来求得。然后我们反照递归顺序由低至上将子问题的解合并起来,逐级上推就构成原问题的解。

在分而治之的策略下,真正的工作也由上述三个步骤组成,即所有的工作分散至这三个地方:分解部分、递归部分和合并部分。而整个分而治之策略的时间复杂性也由这三项的时间复杂性之和构成。由于不断递归后,最后子问题将变得极为简单,能够轻而易举地解决,其解决的时间复杂性在整个策略中的比重微乎其微,可以忽略不计。因此,分而治之策略的真正成本实际上是由分解和合并两个部分构成,即到底有分解多少次,每次分解的子问题数到底是多少?到底要合并多少次,每次分解与合并需要多少时间?其中最为关键的是分解出来的子问题数、每个子问题的大小,以及分解和合并本身的时间成本。这些是决定分而治之策略是否奏效的决定因素。因此优良的分解合并策略就十分重要
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: