分治法的基本思想_算法专题(5)分治

点击上面微信号关注我7a9c553450daa3d55a280c0749651896.png关注我哟 定期推送帐号信息学新闻,竞赛自主招生,信息学专业知识,信息学疑难解答,信息学训练营信息等诸多优质内容的微信平台,欢迎分享文章给你的朋友或者朋友圈!有任何问题请联系小编!

NOI2019 夏令营课程报名中!

1042f6f108f9b05d7f31bbf53fcf5df3.gif

摘要

    之前我们已经发布过(点击标题即可查看):

       算法专题(1)-信息学基本解题流程!

        算法专题(2)-模拟

        算法专题(3)-枚举

        算法专题(4)-递归与递推

五、 分治算法

概述:

将一个难以直接解决的大问题,分割成若干规模较小的相同问题,通过对子问题的求解来得到原问题的解。这种算法设计策略叫做分治法。

1.知识点梳理:

Ø 分治法的使用

分治法的使用基本是基于递归与回溯。先按照一定的分割方法,将原问题一步步分割为规模较小的子问题,递归调用求解子问题;然后在回溯时,利用子问题求解原问题的解。

Ø 用分治法解决的问题特点

分治法所能解决的问题一般具有以下几个特征:

1. 该问题的规模缩小到一定的程度就可以容易地解决。

2. 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。

3. 利用该问题分解出的子问题的解可以合并为该问题的解。

4. 该问题所分解出的各个子问题是相互独立的,即子问题之间没有交集。

Ø 分治法相关的常用算法

分治法是一个非常实用的算法思想,在设计检索、分类算法或某些速算算法中很有效。用分治法思想的常用算法有二分枚举、二分检索、快速排序、归并排序等。

2. 重难点分析:

分治算法设计时,子问题之间必须独立。

分治算法设计时,应考虑其复杂度。有时会设计出复杂度跟直接求解一样的“伪分治法”。

分治法实现时,应注意递归调用时的边界条件。

3. 例题解析:

例题5-1求逆序对个数

【问题描述】对于一个序列a1,a2,a3,…,an,如果存在i,使ai>aj,那么ai,aj就是一个逆序对。现在给你一个有N (N≤100000) 个元素的序列,请求出序列内逆序对的个数。

【分析】此题如果朴素枚举,复杂度为O(N2)。考虑分治的策略,可以将序列分成两部分,分别求出子序列的逆序对个数,再算出横跨两个序列的逆序对数。计算后者时,如果单纯枚举,又回到了原来的算法复杂度。那我们假设前后两个序列已经排好序,那是否就简单一些。

在计算横跨两个序列的逆序对数时,假设前后两个序列已排序完成(升序排列),即,,对于给定需要在序列b中找到比小的最大的值,记做,那么与对应的逆序对个数为j。由于a序列已按升序排好,对于,对应的即。因此,在从前往后枚举a序列的过程中,b序列也只会从前往后扫描一次。一次计算的复杂度为O(n1+n2)。

因此我们边统计边排序。由于子序列内逆序对个数的统计是在排序之前完成的,排序又不影响两序列之间的逆序对个数,所以排序不会影响最终结果。整个解法跟归并排序的方式差不多。复杂度变为O(N log N)。

例题5-2循环赛日程表问题

【问题描述】设有2n(n≤6)个球队进行单循环比赛,计划在2n-1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2n-1天内每个队都与不同的对手比赛。例如n=2时的比赛安排为:

第一天

第二天

第三天

1

2

3

4

2

1

4

3

3

4

1

2

4

3

2

1

【分析】

此题很难直接给出结果,我们先将问题进行分解。

设m=2n,并将规模减半。假如n=3(即m=8),8个球队的比赛,减半后变成4个球队的比赛(m=4)。4个球队的比赛的安排方式还不是很明显,再减半到两个球队的比赛(m=2)。

两个球队的比赛安排方式很简单,只要让两个球队直接进行一场比赛即可:1-2

dfa707c044f337752afa7b3f915a7b05.png

分析两个球队的比赛的情况不难发现,表格主体是一个对称的方阵,我们把这个方阵分成4部分(即左上、右上、左下、右下),右上部分可由左上部分加1(即加m/2)得到,而左上与右下部分、右上与左下部分分别相等。因此我们也可以把这个方阵看作是由m=1的方阵所生成的。同理,可得m=4的方阵:

cf9d90e0d8682a830fb559e368035506.png


同理可由m=4方阵生成m=8的方阵:

2d05beb2cfffdfa47094a09d27064548.png

这样就构成了整个比赛的安排表。在算法设计中,用数组a记录2n个球队的循环比赛表,整个循环比赛表从最初的1×1方阵按上述规则生成2×2的方阵,再生成4×4的方阵……直到生成出整个循环比赛表为止。

温馨提示

暑期对于学习竞赛的同学们来说是难得的提升自我的好机会。清北学堂OI金牌教研团队集结清华北大金牌名师在全国六大校区将同步开展NOIP2019夏令营!各种水平班级不容错过!

f7c214553dbb61b90318d3c7972e17c4.pngcea9df41b21c2e902250d82081266de4.png

往期精选内容

(点击标题即可查看)

NOI2019 夏令营课程报名中!

2019年NOI省队选拔规定及NOI2019名额分配方案发布!

信息学竞赛入选!2019年度面向中小学生全国性竞赛活动名单公示

关于举办第34届全国青少年科技创新大赛的通知

最详细解析低分进名校三大途径:自主招生、综合评价、高校专项计划!

2018年自主招生高校对信息学奖项报考要求及优惠政策参考!报考时要注意哪些问题?

2019年保送生资格名单公示

NOIP2018复赛提高组各省中学 获一等奖人数排行榜及分析!

NOIP2018复赛提高组各省各中学获奖总数排行榜

NOIP2018各省各中学复赛普及组获奖总数分析!

CCF NOI2019冬令营报到通知及冬令营名额分配方案!

再见,OI-大牛HZW亲笔,分享OI生涯记录,不变的是坚持和热爱!

NOIP复赛知识点简述及复赛算法总结!

重磅!NOIP2018初赛普及组提高组真题及答案发布

NOIP2018提高组试题解析

根据信息学竞赛之路带你了解信息学竞赛流程

清华“姚班”2018级名单-看50名学霸到底多牛,同学们又如何能进姚班?

全国自主招生高校对各项学科竞赛奖项要求大汇总!签约路径

教育部出台高中新课标,信息学竞赛相关内容被编入必修课程!

北京大学自主招生初审通过1719人名单公布,看清华北大更青睐哪些省市中学?

IOI 2018国际信息学奥林匹克竞赛中国代表队选拔结果揭晓,看大牛们的竞赛之路!2018年五大学科竞赛国家队名单全部出炉,各省中学大比拼!

从搜狗CEO王小川(信息学金牌),看这二十几年中国奥赛金牌的去向

揭晓高薪专业排行榜,计算机专业薪资最高!哪些专业最具潜力?

2018中国大学排行榜出炉,北大清华连续11年蝉联冠亚军

一个清华保送生妈妈对竞赛的感受,自主招生家长都要看看!

计算机科学与技术专业全国大学排行榜!

为什么这些孩子初中就能被清华北大签约

2018五大学科竞赛国家集训队成员及所在学校名单

(1) 为什么有“编程思维”和数学能力强的人更优秀?

(2)清北独家录制NOIP成功者说学习视频!!!

(3)我们为什么要对孩子进行编程教育?

(4)信息学竞赛答家长问题

1.信息学竞赛,你想了解的知识都在这里

2.信息学奥赛(NOIP)初赛学习方法推荐

3.信息学奥赛(NOIP)复赛学习方法推荐

4.大牛为你推荐十本最适合信息学竞赛的书籍

5.信息学奥赛有那么重要吗?

6.参加编程竞赛对实际工作的用处

7.清北学堂独家录制NOIP考试技巧讲座

8.在线编程挑战赛第一名:我是这么学算法的

9.信息学竞赛如何学习及准备攻略!

10.凭什么我得了信息学奥赛国家一等奖

11.榜样 | 北大降200分要这个诸暨天才少年

12.OI金牌教练胡芳:爱和成长的故事

13.信息学竞赛,一个让孩子不需要再去挤独木桥的方向

14.新学期必须了解的学科竞赛与自主招生时间!

15.北大录取生陈代超:在信息学中找到“思维图谱”

16.国务院发文支持编程教育进入中小学,中国人工智能厚积薄发

(1)NOIP报名,申诉,查成绩方式介绍

(2)NOIP复赛考前需要注意的那些事儿!!!

(3)NOIP测评环境,数据提交你都了解吗?请注意这些问题!

(4)关于NOI系列赛编程语言使用限制的规定

关注「信息学竞赛」

看更多信息学趣闻与知识

↓↓↓

27f859781488b2a998635dd60079c200.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值