分治算法的一般性描述和分析方法

分治算法Divide-and-Conquer§ //求解问题P

1. if |P|≤c then S(P)  //当P的规模足够小,不超过C的时候,有一个直接求解的算法S

2. divide P into P,P,.... Pk  //P大时,把P规约划分成子问题

3. for  i←1 to k  // 从第一个到第k个子问题

4.       yi< -Divide-and-Conquer(P;)  //递归地求解各个子问题

5. Return Merge (Yy2...)  //综合得出原始问题的解

主要步骤: 划分→求解子问题→综合解

设计要点
●原问题可以划分或者归约为规模较小的子问题
子问题与原问题具有相同的性质
子问题的求解彼此独立
划分时子问题的规模尽可能均衡
●子问题规模足够小时可直接求解
●子问题的解综合得到原问题的解.
●算法实现:递归或迭代

分治算法时间分析
时间复杂度函数的递推方程
W(n)=W(|P1|)+ W(|P2|)+…+W(|Pk|)+f(n)
W©=C
●P1,P2,…,Pk为划分后产生的子问题
●f(n)为划分子问题以及将子问题的解
综合得到原问题解的总工作量
●规模为c的最小子问题的工作量为C

两类常见的递推方程
(1)f(n)= ∑(k,i=1) ai f(n-i)+g(n) //子问题变成 n-1,n-2……这类的问题(子问题规模递减),ai是子问题的个数,求和得出的是子问题全部的工作量;g(n)表示分解子问题以及把这些子问题的解综合起来的工作量

(2)f(n)=a f(n/b)+d(n) //子问题按倍数缩小,缩小到原来的n/b,d(n)是分解过程和综合解过程的工作量

例子: ,
Hanoi塔, W(n)= 2W(n-1)+1 //第一类
二分检索,W(n)=W(n/2)+1 .//第二类 一个子问题
归并排序,W(n)=2W(n/2)+ n-1 //第二类 两个子问题

在这里插入图片描述

在这里插入图片描述
//a是子问题的个数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值