分治法1

基本步骤:

  1. 将问题分解成若干个相同的小问题(可以有特殊处理)
  2. 对每个小问题求解
  3. 将小问题的解合并起来(可以有特殊处理)

示例

bit位为n的整数相乘
  1. 常规算法,其复杂度为 O(n2)
  2. 现在将 x,y 表示成:
    x=x12n/2+x0y=y12n/2+y0

    x1,x0,y1,y0 各自只有 n/2 个bit位。我们需要知道 x1y1,x1y0+x0y1,x0y0 ,就可以求出 xy 的值。需要做四次运算,采用得到上面的值,所以复杂度没有降低,但是我们可以通过下面的方法将运算量从4次减到3次
    1. 首先计算 (x1+x0)(y1+y0)=x0y0+(x0y1+x1y0)+x1y1
    2. 计算 x0y0
    3. 计算 x1y1
      通过上面三步就可以得出我们想要的三组数据了,这样问题的复杂度变成了 T(n)=3T(n/2)+cn ,这个时候 d<logba ,所以问题的复杂度为 O(nlog23) ,这样就将问题的复杂度降低了。
规模为n的矩阵相乘
  1. 其基本方法的复杂度为 O(n3)
  2. 同理,我们也可以采用如整数相乘一样,采用分解与整合的方法来降低复杂度。
    5
    上面的算法是一个启发式的算法,所以其简化没有严密性的推理。
    通过上面的方法我们就可以将复杂度从 O(n3) 降到 O(nlog27)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值