分治法求最大最小值_算法分析与设计之分治算法

07488dfbc9cc25e641cab54096144a6d.png

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

cce9c2a0e2f0924ba5e3670acf0914c8.png

分治算法分为三个阶段:

608290383660881f83af5700dba6ddc9.png

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

例1: 归并排序

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

0fb2ef4c6151142a118028054fb5ead7.png

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

a5e483f38e852292c7c6b338221e597a.png

例3: MaxMin问题

846d953baf6bb4e10629b64c87df67e6.png

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

次比较操作,能不能达到更快呢?

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

6bb5d66652f5fa73989b579020e4715f.png

算法的时间复杂度分析:

5095de5f8d3ed61ddf77e9629db070ed.png

使用迭代法求得:

1c25d1d93b199d1edff037c48e7ecfb9.png

例4:整数乘法

d47bb8aced0a1c81e89a8407e4e2d6f9.png

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

, 那么能不能得到更优化的解法呢?

注意到,

dfcf4f98fdb8e9ca0de685de2b4a7401.png

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

,这里是否可以减少乘法次数呢?答案是可以的!

2bec86702a5e5b50173fd058aae10877.png

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

24898618bbb41a3a1ab9273cb3712104.png

例5: 矩阵乘法

eebc8fb1fa5962650790ca4a357f9cdf.png

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

,那么能不能更优呢?

注意到:

699f41880490ec2a02001e9d9ca8250c.png

1867f58c249c8f999e522ea4c55da128.png

473cc9fcb82072d79c3024f0903b6a1a.png

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

35c9a772f2c370d183c8fd635f4b6e56.png

参考:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值