zoukankan      html  css  js  c++  java
  • 求解区间问题的三种做法的区别 线段树、树状数组、RMQ

    树状数组主要用于计算区间的和,在区间元素修改值的时候能够快速修改而不是以O(n)的复杂度进行修改;

    线段树是把区间以树的形式分拆为若干个小区间,每个小区间存的都有一个值(树状数组的元素存的是区间值),所以线段树可以快速获得这个区间里面的所有的节点(元素),主要用于计算每个区间的最大最小元素(也可以快速修改区间元素的值)

    RMQ是用数组的形式存储元素的值,用二分的方法进行计算区间的最大最小值,所以他比较快!但是有个缺点就是每一次修改区间的元素都会影响其最终结果,就是每一次修改都要进行一次RMQ,所以修改的时候很复杂!

    所以如果单纯的计算差点问线或者插线问点用树状数组,如果单纯的求固定区间(即区间的元素无修改)的最大最小值用RMQ!

    如果既求某一区间的最值(或区间和)且又修改值就用线段树!

    如果求区间和且在一定范围内修改区间值可以考虑树状数组做法,参考本人博客:

    彼时当年少,莫负好时光。
  • 相关阅读:
    java第五周作业
    ajax初探--实现简单实时验证
    Html+CSS二周目--->常用概念
    Html+CSS--->第一周初探
    Servlet细节整合
    多线程基础
    设计模式之单例模式(Singleton)
    配置文件Java读写
    Java基础之IO流
    JDBC基础
  • 原文地址:https://www.cnblogs.com/l609929321/p/9365062.html
Copyright © 2011-2022 走看看