分而治之算法

算法是问题的分步骤解决的方法。

 

分而治之的思想是:有很多问题,可以划分为多个小问题,而小问题本身是易于解决的,那么就通过找到”划分方法“,得到小问题后,最终解决原问题。

一、是否所有问题都能划分成小问题?

比如1+1=?可以划分么?不行。因此并不是所有问题都能够划分。

二、怎样的问题能够划分?

和规模n相关的,可以划分成每一个节点,或者某一小段,形成可以直观解决的小问题。就如一条长的线段,分成若干定长的小段,进而解决所有问题。如,一个平面,可以划分为若干小区域,也是一样的道理。只要具备规模性,不是原子性的问题,都能够划分成小的问题。

三、划分的方式有什么分别?

我觉得有三种划分问题的方法,第一种,是根据问题的特点,划分为不同的子问题,每个子问题就是其中一个步骤。大多数数学的应用题都是这样。

第二种,划分成子节问题和剩余问题,而这个划分方式可以重复应用到剩余问题之上。也就能够找出简单的子问题,并且证明剩余问题是重复的简单问题的集合。

特点就是子问题是相似并重复的,不像第一种那样需要针对每个子问题做不同的解答。

第三种,混合一二两种情况。

四、分而治之的重点是什么?

第一就是看是否能够发现重复的子问题,能否发现大问题存在的循环子结构,如果发现就把原问题转化为很简单的小问题。

第二,是否能划分步骤(不同步骤不同解决方法),因为单个步骤往往比整个问题解决起来要简单很多。

第三,子问题是否很容易解决,如果子问题都解决不了,那么划分还有啥意义?

 

比如一个规模为n的问题,可以划分为1 和 n-1 两个部分,其中1是易于解决的。而n-1这个剩余部分可以用相同的划分方式分成1 , n-2两部分;重复这个过程,最终解决所有问题。

也可以划分成n/2 和 n/2 两部分,然后对两个部分继续划分,最终都会成为一个1的简单问题。

 

 

posted @ 2012-11-29 14:17  诺贝尔  阅读(3185)  评论(0编辑  收藏  举报