CDQ-分治和树套树 的结合小结

来源:互联网 发布:淘宝汽车配件 编辑:程序博客网 时间:2024/04/30 15:36
  为什么要将这两个东西放在一起讨论呢?最近出于熟悉至彻底掌握cdq的目的 我去看了很多例题,希望能在其中发现cdq解题的特点和套路,进而真正把握精髓。可能是因为资源选的不好,这些题目简化后大都大同小异,所以我学习时担心有一些稀奇的cdq应用方法没有见识到。可能会造成知识的片面。  就算是这样,我想目前还是积累了一些浅薄的思想,大概有以下  我觉得cdq是一个简单的算法,但是它的思想很有价值。我时常在想,遇到一道cdq的题目,我怎么能从题意中把握出:这是不是一道cdq;如果是,我怎样快速分析出cdq在其上的应用。  现在只有一点点经验谈(无怪笔者只是蒟蒻),而且只限于那些 题目中只有极少的条件限制,感觉应用也挺狭隘。。。。。如何解决多个条件(一般三个)有序,可以通过将其中一个条件(称之为大条件)二分,二分意味着,在当前这个阶段,我只处理在这个条件中,横跨该条件的转移。大体上就是设置出mid,只解决那些了 l<mid<r 的 (l,r)。这样的好处是,其他条件我们就可以维护有序了,毕竟想要满足大条件只需要判断大于mid还是小于mid。  思想上就是,为了使大条件易于判断是否满足,我们采取二分的策略,这样子牺牲了 要重复做log N次转移,也就是复杂度上多了log 换取的是,在其他小条件上更加易于满足。这样的取舍其实比较容易判断。  1.这类问题一般有几个鲜明的条件设置,由满足条件的小问题转移而来,以目前的眼界,大概只是一些简单的大小关系,但是由于该关系的繁多,使得数据结构的应用变的困难。换句话说,保证其中一个条件的有序(有序当然就方便我们查询满不满足),其他的条件顺序就变得不确定起来。而相应不同题目的具体要求,就会难以维护无序插入的某些信息。  2.当然有无后效性(这只是具体而言,不是共性),对单个问题的答案是否有影响,怎么影响,全取决于条件的限定,与子问题的答案无关。  3。我再提提有关整体二分和cdq的区别。其实我觉得是一种处理操作的方式吧。整体二分是二分操作对答案造成的影响吧,在这个过程中就可以细分某个询问属于那边的操作。cdq是  p.s 以上说的转移这类词只是方便叙述,也可以称之操作什么的。  现在认识还不够深刻,等将来接触的多了后再回来精炼内容。  现在谈树套树,因为在很多cdq的例题中见到了树套树的解法,所以也了解了一下。在这类题中,我觉得想到树套树是比较容易的,想到分治是挺难的。这点应该挺显然,感觉上树套树思想十分直接,就是用基础的线段树一类的思想查询,条件太多一个下标没法表示充分,我就再在每个节点种一颗。树套树是比较简单的,重点应该在如何应用,我认为应该在内外层的选择上,外层线段树是用哪个值作为下标呢?这是一个应该根据题目思考的地方,也许会极大影响编程复杂度。  树套树于我,目前还存在的问题是尚不熟练,打的比较少。而且树套树本身也比较繁琐,不好调。  这篇内容目前还是浅析,至于相关算法更多奇妙应用和扩展 以后碰到了再来修改。
0 0
原创粉丝点击