2016.8.25 分治
由于博客是写给自己看的,所以用到了大量简写题也没有写出来,有需要的可以联系我要题目的pdf,本章ppt,讲义以及题目测试数据,由于上传不方便我就不上传了,联系邮箱SindarDawn@163.com
分治
一.基本概念:
1.定义:通过对较小规模的问题的求解达到对整个问题的求解的递归算法;
2.含义:把各部分的接组合成整个问题的解;其实分治不好想但好写,做题时一定要小心“有序”这件事;
3.要素:数据有序或答案有序或单调;
4.执行:解决子问题*子问题个数+合并子问题*合并次数;(对于二分来说,通常是nlogn(可证明))
5.注意:跳出循环的条件一定要能达到,如果跳出循环时lef!=rig的话记得都验证一下;
6.技巧:可以用等号的取与不取来选择相等中的第一个或最后一个;
二.常见模板:
1.有序找数:
特点:答案有序可以分治找答案,数据有序可以分治找数据;方程求解其实就是答案有序,不过特别放在一类以表重要;
举例:找数;
2.归并;
特点:将数据二分,最后再合并,因为各自有序所以会节省很多时间;还可以求逆序对;
注意:求逆序对时,两边数列相等,则应该让前面的数列先出数,因为前面的数列接下来的其他数字很可能比后面大,如果后面先出则未计算,会导致结果偏小;
举例:归并排序;光荣的梦想(逆序对)
3.方程求解;
特点:找经过一定操作后等于某值的数,分治基本题;
注意:仔细理解“精度”的意思,应该取差距小于精度的1/10才对;
举例:一元三次方程求解
4.找规律;
特点:需要经过观察才能得出,属于比较难的分治,且输出格式也比较难把握,需要足够熟练仔细思考;
技巧:专注数字的变化,不必传递两个数字;抓住正方形的特征,用数组先存储;
举例:循环比赛日程表;
5.二分计算再合并;
特点:比顺序计算要快,需要同时熟练掌握高精度;
举例:取余运算(快速幂),麦森数
6.分治思想:
特点:并未传递二分边界,只是利用了二分“分而治之”,互不干扰的思路,把某一部分撇开与原问题一样地讨论,较难,需要把握分治精髓;
举例:黑白棋子的移动(移动成指定图案)
三.上手例题:
1.求逆序对:
如上;
2.黑白棋子的移动:
题意:移动成指定图案;
分析:这道题不像二分,但借用了二分分成更小规模依次解决的思想,很值得借鉴;
3.循环比赛日程表;
分析:该题目的输出很艰难,几乎无法用分治完成,后来发现可以用数组,以及按正方形边长来分治,和以往的二分都不一样,是一道开阔眼界思维的好题;
3.一元三次方程求解
分析:需要对函数性质进行分析,画出典型函数图象来确定求解方法是否适用怎么用;
4.麦森数
分析:一是确定位数的方法非常巧妙,需要灵活运用数学能力,体现了数学在OI中的重要地位,而是定位数高精度很难写对,需要把握好每一个细节;