算法思想之分治递归策略

摘自 邹恒明《算法之道》

 

 

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

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

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

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

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

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

        在分而治之的策略下,真正的工作也由上述三个步骤组成,即所有的工作分散至这三个地方:分解部分、递归部分和合并部分。而整个分而治之策略的时间复杂性也由这三项的时间复杂性之和构成。由于不断递归后,最后子问题将变得极为简单,能够轻而易举地解决,其解决的时间复杂性在整个策略中的比重微乎其微,可以忽略不计。因此,分而治之策略的真正成本实际上是由分解和合并两个部分构成,即到底有分解多少次,每次分解的子问题数到底是多少?到底要合并多少次,每次分解与合并需要多少时间?其中最为关键的是分解出来的子问题数、每个子问题的大小,以及分解和合并本身的时间成本。这些是决定分而治之策略是否奏效的决定因素。因此优良的分解合并策略就十分重要

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值