zoukankan      html  css  js  c++  java
  • 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中的重要地位,而是定位数高精度很难写对,需要把握好每一个细节;

     

  • 相关阅读:
    bzoj4105: [Thu Summer Camp 2015]平方运算
    bzoj4035: [HAOI2015]数组游戏
    bzoj1022: [SHOI2008]小约翰的游戏John
    bzoj4665: 小w的喜糖
    CodeChef:Little Elephant and Colored Coins
    bzoj4664: Count
    bzoj4498: 魔法的碰撞
    bzoj4230: 倒计时
    bzoj4532: [BeiJing2014 WinterCamp] 珠链
    python 画正态曲线
  • 原文地址:https://www.cnblogs.com/SindarDawn/p/5805330.html
Copyright © 2011-2022 走看看