分治

                                                            分治模版思想


王健林说:“我们首先要有一个小目标,比如挣他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);
   // 合并:将各个子问题的解合并为原问题的解。
   ................... 
}

蒟蒻的小心得。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值