分治

来源:互联网 发布:免费采购软件有哪些 编辑:程序博客网 时间:2024/05/18 01:11

                                                            分治模版思想


王健林说:“我们首先要有一个小目标,比如挣他100000000!!!”
显然,这对大部分人都是极难实现的“小目标了”。
那么100000000分成两个小目标,就是挣两个50000000,先完成一个小小目标,再完成另一个,好像容易些。
However,这显然对大部分人也都是一个遥不可及的小目标。
但不断的分成几个小小小目标,小小小小.........(n个小)目标,那么到最后对于每个人都会有一个可以实现的小目标了。
那么完成一个在做另一个规格相同的小目标,合在一起,不断积累,是不是就能挣一个亿了!!!!!

简直做白日梦。

----------------------------------------------------------------------分割线---------------------------------------------------------------------------

咳咳,下面来讲分治。


分治分治,分而治之,逐个击破。
分治在五大常用算法中占了一席之地。
1.分解
在题目中往往会有一个复杂,难以进行,但又有点小规律的问题,就好比生活中的“小目标”,但分解成若干个小规模,相对独立,与原问题形式相同的子问题便相对容易些了。
2.解决
若子问题规模较小能解决,就直接解决(你可以挣50000000就不用分了),但规模过大(挣不到50000000= =)递归分解成若干个子问题,知道可以解决。
3.合并
将各个子问题的解,合并为原问题的解(挣了两个50000000就是100000000)


这就是分治。

伪代码。

void solve(p)//p表示问题的范围,规模或别的东西。{if (p规模小)      {      边界,或者用简单的方法解决;       }    // 分解:将原问题分解成若干个规模较小,相互独立,与原问题形式相同的子问题。    // 一般把问题分成规模大致相同的两个子问题。   for(int i=1;i<=k;i++)     把p分解,第i个子问题为pi;   // 解决:若子问题规模较小,容易被解决则直接解,否则递归的解各个子问题。   for(int i=1;i<=k;i++)     solve(pi);   // 合并:将各个子问题的解合并为原问题的解。   ................... }

蒟蒻的小心得。。。

原创粉丝点击