zoukankan      html  css  js  c++  java
  • 分块学习笔记

    (2019/10/3 UPD:)
    我回来填坑了

    分块:

    联想一下线段树,分块也是一种基于对数据进行信仰合理分治以提高处理效率的算法

    考虑一下线段树是一分为二的树形数据结构,即有从属关系(一个节点的两子节点从属于它)
    而分块是一种线性的分治方式,它把数据分成若干个互不影响的块,之后对于一些范围较大的询问在大块上整体查询,小块上暴力
    考虑在大块上打整体标记记录整体信息,比如一个块的和或加法乘法标记(类似线段树的(lazytag)
    然后是大家喜闻乐见的 块大小是(sqrt(n))的,合理脑补可以发现这个时候均摊复杂度最小 (O(nsqrt(n)))
    想证明的话放个均值

    可能有点抽象 脑补一个例题

    给定长度为(n)的序列支持区间加区间求和,(n <= 10^5)
    考虑预处理每个块的和,以及每个块上打加法标记
    每次修改时大块直接打标记,小块暴力加在原数上
    查询的时候同理,同时把加法标记累加到(ans)
    ...
    大概讲了一下思想,其实和线段树有很多类似的地方,可以自行理解一下

    另外一个很妙的(Point)是分块对于数据的分治是线性的,和线段树不同,线段树对数据的处理是有传递关系的(一个节点会继承它两个子节点的信息,虽然继承这个词不太妙),所以维护的信息一定要支持区间可加性,而分块由于块与块之间互不影响,可以维护更多类型的信息,但跑得比线段树慢

    其实生活中很多地方也能遇到分块的思想,把算法推而广之应用至生活中岂不更为妙哉

  • 相关阅读:
    2013-11-23 sentence patterns
    面试题 盛水 twitter
    Uva 10025 The ? 1 ? 2 ? ... ? n = k problem
    FTP服务(5)客户连接常见故障现象
    FTP服务(4)基于MySQL数据库认证
    FTP服务(3)实现基于文件验证的vsftpd虚拟用户
    FTP服务(2)实现基于SSL的FTPS
    FTP服务(1)
    Apache httpd服务
    Apache httpd服务——常用配置
  • 原文地址:https://www.cnblogs.com/kma093/p/10295190.html
Copyright © 2011-2022 走看看