• 浅谈数据结构—分块


    数据结构—分块

    分块是一种非常好理解、非常好写的数据结构。与其说分块是数据结构,倒不如说它是一种“算法”,甚至是一种“思想”。我个人认为,分块的思想和分治法很像。它们的基本实现方式都可以概括成:将一个大问题拆成若干小问题,最后求解完小问题之后将答案汇总得出大问题的答案。

    分块的基本实现是这样的:对于一个长为(N)的序列,我们把它拆成(sqrt N)个块,(当然,每块的元素数量当然是(sqrt N)个),我们对每个块进行暴力区间维护。最后就能处理出(sqrt N)个子问题的答案,当我们要统计一个问题区间时,我们就可以统计被这个区间完全覆盖的块的答案,对于个别超出的再进行暴力统计即可。

    分块作为一种数据结构,它的实现基于暴力枚举维护。大家可能会想:这个数据结构和暴力枚举有什么区别?但分块和枚举其实是有很大区别的。这是因为分块只需要跑一遍就能处理出所有块的答案,最后统计的时候是按块统计的,而不需要再重新进行暴力。分块的时间复杂度是(O(NlogN))的,我们算一下,就会发现它比暴力枚举快不了太多。事实上,它的确是所有区间统计数据结构中(其他的比如线段树,树状数组等)效率最低的一个,但是它有它自己的优点:易于理解,易于实现。这也是它作为一种实用数据结构存在的原因——当我们在考场上不能百分百保证自己敲出来的高级数据结构(手撸线段树等)正确,那还不如使用简单易写的分块,虽然得不了满分,但在数据构造不刻意卡分块的情况下,对付个60-80分不成问题,RP好一点的甚至可以AC。所以,分块的确是一个简单易学易用的骗分神技小技巧。

  • 相关阅读:
    extjs grid renderer用法
    spket对Extjs4的支持方法 eclipse插件spket安装 extjs4 提示
    Delphi关于多线程同步的一些方法 zb
    指针学习(一) zb
    struts2中action实现ModelDriven后无法返回json的问题
    前端css编写规范
    javascript 原型链
    chrome bug
    浏览器缓存
    RegExp
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11432436.html
Copyright © 2020-2023  润新知