首页 > 其他分享 >维护区间幺半群信息的科技

维护区间幺半群信息的科技

时间:2022-12-05 17:55:06浏览次数:51  
标签:log 树高 复杂度 区间 块间 半群 Theta 维护 数据结构

有一个长度为 \(n\) 的序列 \(a\),定义一个二元运算 \(x\circ y\),它满足结合律。\(q\) 次询问,每次求 \(a_l\circ a_{l+1}...\circ a_r\)。

线段树是解决这种问题的数据结构之一。猫树可以在 \(\Theta(n\log n)-\Theta(1)\) 内解决。sqrt-tree 可以在 \(\Theta(n\log\log n)-\Theta(\log、log n)\) 内解决,但利用二进制的特性可以把查询优化到 \(\Theta(1)\)(使用builtin系列函数)。先讲一下易于理解的 sqrt-tree。

P3793 由乃救爷爷中用到了分块然后对每一块维护前后缀信息,再维护块间信息的方法。这种方法在非随机数据下十分优秀。但我们是理论计算机科学家,我们非要让它理论复杂度严格。

于是就有一位老哥跳出来说我们可以把这个东西递归下去,即sqrt-tree。也就是对于每个小块都用这种分块维护。然后这样就形成了一颗树,树高是 \(\Theta(\log、log n)\)。

但是这个做法就有个很哈的地方,就是块间的信息其实是一个子问题,但是它却是用的暴力。

注意到可以用猫树维护块间信息,并且把块长调到 \(log\)。这样每递归一层子问题都会变成原来的 \(\log\) 规模,树高只有 \(\Theta(\log^*n)\)。因为我们一直保证了每一层的时间是 \(\Theta(n)\) 的,所以这个复杂度就是 \(n\) 乘上树高。

我们把单纯的猫树这一数据结构叫做第 \(0\) 层数据结构,上面说的数据结构叫做第 \(1\) 层数据结构。下面我们来搞一个第 \(m\) 层数据结构,用 \(T_m(n)\) 表示 \(m\) 层数据结构在长度为 \(n\) 的序列上的树高。比如 \(T_0(n)=\log n,T_1(n)=\log^*n\)

由于到了第 \(m\) 层,所以这个复杂度也不完全是树高乘 \(n\)。因为块间查询最坏要依次递归第 \(m-1...1\) 层数据结构,所以复杂度应该是 \(\Theta(n*m)\) 的。

第 \(m\) 层以 \(T_{m-1}(n)\) 为块长。这样保证了对块中间信息的处理是 \(O\Theta(n)\) 的。得到树高为 \(T_m(n)=T_{m}(T_{m-1}(n))+1\)。

你不觉得这个东西很像某个函数吗???

非常惊奇地发现这就是阿克曼函数,我们只需要找到一个 \(T_m(n)=1\) 使得树高为 \(1\) 即可,那么 \(m=\alpha(n)\),这是一个总的复杂度为 \(\Theta(n\alpha(n))\) 的算法,已经是此类问题的下界了。

标签:log,树高,复杂度,区间,块间,半群,Theta,维护,数据结构
From: https://www.cnblogs.com/stinger/p/16953011.html

相关文章

  • 2022-12-03 背驰段中使用区间套才有实际意义,看2022年9月6号的市场连线
    1.一定先找大级别的背驰段。比如说首先发现周线的底分型。2.然后在区间套中找到是否所有级别都完成,就是最低级别都要完成。这里日线就完成线段了。3.所有级别都走完。......
  • Linux常见基本维护查看命令(1)
    1、如何看当前Linux系统有几颗物理CPU和每颗CPU的核数?[kiosk@rhce8-exam43~]$cat/proc/cpuinfo|grep-c'physicalid'4[kiosk@rhce8-exam43~]$cat/proc/cpuinfo|gr......
  • 服务器软件如何维护
    1、数据库服务数据库中的数据是最重要的,因此需要定期来备份数据库,以防万一。2、操作系统的维护操作系统是服务器运行的软件基础。3、用户数据维护服......
  • 力扣 leetcode 986. 区间列表的交集
    问题描述给定两个由一些闭区间组成的列表,firstList和secondList,其中firstList[i]=[starti,endi]而secondList[j]=[startj,endj]。每个区间列表都是成对不......
  • 《浅谈函数最值的动态维护》阅读随笔
    \忆哀/\忆哀/\忆哀/\忆哀/我不觉得我能在短期内啃下这篇论文10k预定了好的我写完了确实10k摘要咱整点好活!现在我们可以维护一堆函数的最值了,复杂度优于以往做法。......
  • js判断时间区间是否重叠
    <script>constrange=[{st:"2022-11-2910:00",et:"2022-11-2911:00",},{st:"2022-11-29......
  • WeLink互动直播:维护网课秩序,杜绝外人乱入
    ​目前许多学校都在通过网课的形式进行教学然而,在师生上网课期间外部人员误入、扰乱课堂纪律的情况时有发生因此,WeLink推出互动直播攻略为师生提供课前、课中、课后全流程教......
  • 单链表指定区间反转(python)
    单链表中的第m和n之间元素反转m=2,n=4具体做法:step1:我们可以在链表前加一个表头,后续返回时去掉就好了,因为如果要从链表头的位置开始反转,在多了一个表头的情况下就......
  • 自己维护vue项目的路由跳转历史记录
    问题:公司开发一个商城,总是遇到回退到上页面时会有很多逻辑处理,由于每个页面都要写回退的方法,所以总会漏掉一些判断,导致出现很多类似的bug。所以想到了可能自己封装一下,来......
  • 区间合并
    给定 nn 个区间 [l,r],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。#include<iostream>#include<algorithm>#includ......