首页 > 其他分享 >闲话 Day15

闲话 Day15

时间:2023-07-07 21:11:06浏览次数:52  
标签:有序 log SAM 闲话 复杂度 Day15 数组

这两天的题完全改不动。
两个星期之后就 NOI 了,和现在完全没有的水平形成了鲜明的对比。

前两天又去找了点神仙 DP 做了做。
结论是两年白学。
题解都看不懂。


为什么闲话 Day13 看的人那么多。
是因为我引流了吗。。。

然而这个是学术闲话。
鉴于没有题材那就整点普及内容吧。


本来挺喜欢 SAM 的。
单字符串问题可以直接做,多字符串还可以跑广义 SAM。

然而,前两天去广义 SAM 题解区翻了翻,发现广义 SAM 的复杂度是 \(O(n|S|)\)。
。。。。。
突然就感觉很不优秀了。


所以,今天提供一个好写的 \(O(n)\) 复杂度小常数建普通 SAM 的方法。

啥,你说平常写的 SAM 就是 \(O(n)\) 的?
显然是 \(O(n \log |S|)\) 吧。
而且时空常数还挺大的。

显而易见的,瓶颈在于快速查找 DAG 边。
所以容易想到哈希表。

然而直接 unordered_map 显然不现实。
我们可以使用类似于 vector 的倍增重构思想。

具体的,每个节点维护初度 \(D\) 和目前 Hash Table 长度 \(len\)。
如果发现插入一条边之后 \(D > \frac{len}{2}\),就将 \(len\) 翻倍,整体重构。

复杂度考虑对于某个节点,如果最后长度为 \(len\),则重构总代价 \(T(n) = T(\frac{n}{2}) + O(n) = O(n)\)。
为了缩小空间常数可以使用线性探查解决碰撞。

至于扩大 Hash Table 长度,朴素实现可以直接用 vector
然而这并不符合我们常数小的要求。
可以直接开一个静态数组,然后每次在上面新开一段分配内存。
容易发现空间复杂度还是线性的。分析同时间。

实际效果是跑得飞快。
即使在 26 的字符集大小下也能显现出来优势。
甚至空间比直接开 26 长度数组小了一半。
提交记录

目前在板子题上跑得比这个快的只有实现良好的 SA-IS 了。


关于这东西的用处。
显然,根据经典结论,反串 SAM 是正串后缀树。
而后缀树上 DFS 可以得到后缀树组。
所以我们可以直接借助 SAM 完成任意字符集大小的后缀排序。
复杂度严格线性,常数大抵是小于 DC3 的。
而且理解难度小(假如会 SAM 的话。就不用去学什么 SA-IS 了)


然后发现没有东西可写了。
炒冷饭!
只要没有出现在闲话里面就可以再写一遍!


普及组选手也能现场口胡出来的可并堆!

考虑我们现在要维护若干集合。
支持新建集合、插入元素、查询最大最小值、删除最大最小值、集合合并。

也就是 永远亭计数 这个题。

显而易见的是我们可以对一个集合维护两个左偏树来完成这个东西。
然而空间常数其实还挺大的。

所以我们来整一点可以同时维护最大最小值的可并堆。

首先考虑我们去维护有序数组。
因为,有序数组归并是 \(O(n)\) 的诶,不带 \(\log\)。

当我们去合并集合 \(A,B\) 的时候,直接归并。
如果 \(|A|,|B|\) 差不多复杂度自然是正确的,也就是启发式合并了。

然而如果 \(|A|\) 远大于 \(|B|\) 呢。
好了我不会了,那就不合并了。
直接维护两个并列的有序数组好了。

然后我们发现,这东西复杂度对了。

考虑把规定描述的严格一点。
对于每一个集合,我们维护若干个有序数组。
如果存在两个有序数组 \(A, B\),满足 \(|A| > |B|\) 且 \(|A| < 2|B|\),那么我们就将 \(A,B\) 归并。
那么容易发现,对于一个集合,其内部最多只有 \(O(\log n)\) 个有序数组。

考虑我们还需要查询最大最小值。
暴扫显然是 \(O(\log n)\) 的。
然而我们可以直接对于每一个堆,记录下来这两个值。
这样查询就是 \(O(1)\) 的了,把复杂度丢给修改即可。

考虑插入/删除。
插入自不必多说。可并堆的插入都是直接合并的。
删除的话直接扫 \(O(\log n)\) 个有序数组,对于每个有序数组,维护一个 \(begin\) 一个 \(end\)。
删前面/后面就直接改即可。
当然,删完之后需要注意一下合并的问题。

各项复杂度和左偏树完全相同。
但是空间常数极小。
(如果实现良好的话。事实证明很难实现的很好)

另外,可以在支持合并的前提下,\(O(\log^2 n)\) 支持查询集合内 \(< k\) 的数的个数。
当然,如果牺牲一点点常数的话,可以做到 \(O(\log n)\)。
做法简单所以不放了。和强制在线 CDQ 那个一样。


之前认为我还算是喜欢学术一类的东西吧。
然而真的是这样吗。


在 東方Project 里面盘点一下喜欢的角色吧。

首先自然是蓬莱山辉夜。
如果再说的话可以算上早苗、铃仙、文。
倒是各有特点,不太好说有什么共性。
然而这四个里面人气最低的是辉夜 ?!


根据官方设定,早苗的能力是创造奇迹程度的能力。

在仔细考虑之后,可能我所认为的喜欢学术只是单纯的喜欢奇迹罢了。
引用 Day9:

这是什么,有意思,研究一下。
这是什么,好优秀,实现一下。

由于 OI 水平很低所以看什么东西都觉得很神奇。
所以在探究的过程中会带来很多新鲜感。
和小小的 OI 震撼。

所以,可能我所喜欢的只是见证奇迹和创造奇迹罢了。
对于知识本身,我不好说。

这么看的话,关于学术这件事还需要慎重考虑一下。
学术中几年没有任何进展是非常常见的事。
如果新鲜感被消磨干净了那就非常危险了。


总是有一些不太好的感觉。
虽然没有任何理由,但是总是感觉现在开始攒钱是有必要的。
当然,可能攒钱没有用。攒点什么我不好说。
在庞大的社会经济面前个人积蓄啥都不是。
希望只是杞人忧天吧。


闲话 Day16 可能会加一点隐私内容?
看心情。
目前为止比较了解我的人不多。
多留一点隐私空间是好的,但是。。。

倒时候看心情写。写多少算多少了。


容易发现近几期闲话攻击性小了很多了。
大抵都是一些和日常生活贴近的东西。

其中一个原因是这些天确实没时间思考那些离生活很远的东西。
闲话一类的,一般都是当时想到了当时写。

当然,对于大多数人阅读闲话的习惯来看,那些东西写了也没啥用。
简单看一看过去了,可能没过几分钟就忘掉了。


回顾之前的各种闲话。
发现我在措辞上面其实还是比较的保守的。
一般都会加上各种限定词,不会把话说的非常绝对。

这个习惯哪里来的,不清楚。
而且平常说话也会稍微带点。只不过很难注意到。

也许会显得很不严谨?


再写两行。
凑够 200 行就跑路。
诶好了够了。闲话结束。

标签:有序,log,SAM,闲话,复杂度,Day15,数组
From: https://www.cnblogs.com/-Houraisan-Kaguya/p/17536082.html

相关文章

  • 7/5 闲话
    今天英语老师上课闲扯的东西感觉很有意思,大意是这样的:你喜欢一个人的时候,你其实是喜欢自己,你在和自己谈恋爱,你把ta形象化了来一个形象化问题:求\[\sum_{i=1}^{n}\mu^2(i)\]我们写出\(\mu^2\)的狄利克雷生成函数:\[\prod_{\text{pisprime}}(1+\frac{1}{p^z})\]又有......
  • 闲话 Day13.5
    稍微沾点学术而且闲话不多。难得一见的,我也开始打专题了啊。放在之前大概是完全不做/找几个水题打完跑路的。可能是感觉DP/字符串这边确实啥都不会吧。能够放到专题里面的题大抵质量还是不错的。所以打一打没啥坏处。相对来说,可能打专题比打模拟赛的用处大一点(?)然而,不可否......
  • 闲话 Day13
    又是半个月过去。然而这半个月越来越菜了。。。鉴于啥题材都没有了,所以今天闲话我们来炒炒冷饭。警告:以下内容没有任何实用价值。对复杂度不感兴趣可以直接跳过。常见算法/数据结构瞎写。之前的一车复杂度分析炸了所以被迫删了重写(然后发现没啥可写的所以开始瞎写(先说ST......
  • 6.24闲话
    还有不到1个月就要考NOI了,很紧张。今天有一位考上中科大的同学来机房玩,羡慕他可以提前上大学而我还要上一年高三。忽然想起当初我决定停课学OI是因为讨厌文化课,到机房可以逃掉两年文化课,但没想到到了机房还是要学文化课,好在考试变少了很多,也没有班级排名和年级排名。以往的文化......
  • 6/22 闲话
    一个路由器供着一个机房的电脑,所以今日无歌,无图,无meme二项式反演一般有三种形式:\[f(n)=\sum\limits_{i=0}^n(-1)^i{n\choosei}g(i)\iffg(n)=\sum\limits_{i=0}^n(-1)^i{n\choosei}f(i)\\f(n)=\sum\limits_{i=0}^n{n\choosei}g(i)\iffg(n)=\sum\limits_{i=0}^n(-1)^{n-i}{......
  • 闲话 Day12.8
    一如既往的,没有任何学术题材。果然还是太菜了啊。。。所以今天来点抽象东西。我是这个星球的一员。每天住在工厂,日夜不停的加班工作。周围还有好多好多的员工。他们就和我一样不知疲倦的工作着。我似乎从未考虑过工作的意义。或者说,可能我天天不带脑子吧。当然这也无所谓......
  • 6/20 闲话
    今日推歌:電波中毒ガール-zakooon/初音ミク点击查看歌词手のひらサイズの"世界"が手掌般大的“世界”僕を遠くの君へと繋げる联系起相隔的你我きっと目の前にいる君よりも一定比在我眼前的你遠く俯き加減の君にさ远远微微低头的你啊たった数文字程度の呟き仅是寥寥数......
  • 2023-06-17 闲话
    生活在这一周里面陷入了一团糟,不妨称之为随机生活。像吃饭睡觉这样的最最基础的物质生活完全没法保证规律,作息是随机作息:第一天到家的作息是三点到六点,中午睡了一小时,晚上熬夜看了欧冠决赛;前天是十二点到六点,昨天是十点到五点。你觉得这不是迈上正轨了吗,我觉得不然,比如我们看看......
  • 闲话 Day12.5
    啥时候想起来了就写一写比较好。因为这几天一直在颓所以没啥学术内容。而奇数闲话是学术诶。所以就整了个分数闲话。这种东西可能篇幅会比较短吧。这几天一直在高强度水QQ。而且貌似强度越来越高。不过仔细想一想,之前在机房的时候也差不多。当时经常找APJ一聊一下午或......
  • 6/16 闲话
    最近搞了很多式子,合起来写一个东西推歌:シェーマ-Chinozo/v_flower歌词笑顔に花咲く君の目が夜の街にfadeoutAhfadeoutahfadeout見送る先には死者のcity分からないな世界血を流す覚悟を絡まっていた僕は最低だIdon'tsayNoをNoNoを自身のためそ......