算法设计与分析的综合性论文_算法分析与设计之分治算法

705819ed555655fa395846df098fdd00.png

分治算法采用了“分而治之”的思想,将一个问题划分为子问题,子问题求解了,那么合并子问题的解就能得到原问题的解了!

4273b70fce3d60c9337aa5192be5c76d.png

分治算法分为三个阶段:

1018eadb854df811833b98e6055a5998.png

接下来看几个分治算法的例子来体会该思想!

例1: 归并排序

问题:给一个集合中的数字进行排序。

c20d6f618b04bc6830a8de49dd9d80fd.png

例2: 求一个集合中的最大数算法?

41d5f6ffcf9e005a6de74cf580f31129.png

例3: MaxMin问题

cdd0b9510c0779897d1545e2279eb6f1.png

思考:直接扫描求的最大值和最小值,需要

equation?tex=2n-2 次比较操作,能不能达到更快呢?

思路:将这组数分为两部分,分别求的两部分的最小值和最大值,合并的时候最小值取两部分最小的,最大值取两部分最大的即可!算法伪代码如下:

0d6297acc21970cca1b455e26e76ed22.png

算法的时间复杂度分析:

c936906667230c5323d78b9aaeebe224.png

使用迭代法求得:

6a589cc9d13b80a7a4de9e4ea7b631a5.png

例4:整数乘法

0a4b02ac0f59ce2fc1b90d0b6a47757f.png

思考:直接相乘,算法的时间复杂度为

equation?tex=O%28n%5E2%29 , 那么能不能得到更优化的解法呢?

注意到,

555ee3328a53fee1b0455445f523fb40.png

使用了4次乘法,故时间复杂度为

equation?tex=O%28n%5E2%29 ,这里是否可以减少乘法次数呢?答案是可以的!

a8f346b4241150df0ccb4eb0abcbb839.png

此时,算法的时间复杂度为:

f3926fce986412f444b7dabe7f593b36.png

例5: 矩阵乘法

38c3ba5add0d5d9aebfbc62ec23f3004.png

思考:直接计算矩阵A和矩阵B的乘积的时间复杂度为

equation?tex=O%28n%5E3%29 ,那么能不能更优呢?

注意到:

e9f172df44cd39569c03671112ecd7ce.png

6116b6977503b144f13ca791a7a65940.png

b0f092a590ba0b6dcab0e12a98984665.png

故得到算法的时间复杂度为:

8102d1ced769cea2f7d9f174c6b4bd8d.png

参考:

【1】哈工大骆吉州《算法分析与设计》PPT

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值