又是半个月过去。
然而这半个月越来越菜了。。。
鉴于啥题材都没有了,所以今天闲话我们来炒炒冷饭。
警告:以下内容没有任何实用价值。对复杂度不感兴趣可以直接跳过。
常见算法/数据结构瞎写。
之前的一车复杂度分析炸了所以被迫删了重写(
然后发现没啥可写的所以开始瞎写(
先说 ST 表吧。
考虑我们 ST 表能干什么。
查询区间最小值,预处理 \(O(n \log n)\),查询 \(O(1)\)。
但是太差了,直接快进到预处理 \(O(n \log \log n)\),查询 \(O(1)\)。
然而上面那个东西是个 CSP 初赛知识点,四毛子算法。
我们认为这不够 polylog。
容易发现上述算法本质上就是一个 \(\frac{n}{\log n}\) 叉分块。
所以散块为什么要用不够优秀的 ST 表啊,直接递归调用自己即可。
先分析查询复杂度。
观察到这次层数不是 \(O(1)\) 的了,所以查询也不再是 \(O(1)\) 的。
可以写成 \(T(n) = T(\log n) + O(1)\)。
这是一个多重对数。
可以认为这东西渐进优于 \(O(\log \log \log \log \log \log ...\ n)\)。
而预处理复杂度就是 \(n\) 乘上一个层数。
所以预处理是 \(O(n \log \log \log \log \log \log ...\ n)\)。
一种无限趋于线性的感觉。
这就是 polylog!
然而静态区间 RMQ 显然有简单的线性算法。
所以上面那个东西除了很有意思以外啥用没有。
考虑一点别的吧。
单点加,区间求和,能做到什么复杂度?
然而已经有前人的分析了,所以扔一个论文跑路。
神仙论文。
结论是在任意群上不会低于 \(O(n \log n)\)。
当然,很多时候可能会遇到修改查询不平衡的情况。
例如线段树分治。
但是如果我们启用分块,复杂度就不再是 polylog 了。
所以多叉线段树还是有用的。
经典的 \(\log n\) 叉线段树不说了。
然而修改操作只能做到 \(O(\frac{\log n}{\log \log n})\)。
我们可以尝试一下让修改操作变得更低。
一个经典的思路就是,把叉数开大,层数降低。
所以我们来试试 \(O(\log^2 n)\) 叉树。
然而,容易发现最后的修改复杂度还是 \(O(\frac{\log n}{\log \log n})\)。
原因是 \(\log a^b = b \log a\)。
所以我们只能在指数上面动一动了。
考虑 \(O(\log^{\log \log \log n} n)\) 叉树。
这样的话,层数就被我们降到了 \(O(\frac{\log n}{\log \log n \log \log \log n})\)。
但是查询有点大。
鉴于子节点数量有点多,所以我们需要对每个节点的子节点也开数据结构维护。
那就分块吧。
最后的查询复杂的 \(T(n) = T(\frac{n}{\log^{\log \log \log n} n}) + O(\log^{\frac{\log \log \log n}{2}} n)\)。
不会分析,咕了。
然而这个复杂度也不是 polylog 的样子。
反正我也不可能去打的对吧(
根据数据范围再微调吧。
在上面那个可爱的东西分析完之后,我又去思考了另一个东西。
渐进复杂度是干啥的。
首先,应该考虑复杂度是在什么基础上分析的。
一般而言复杂度分析基于现代的电子计算机。
特点是基础运算、内存访问都是 \(O(1)\)。
然而用这个分析复杂度在数学层面并不严谨。
因为按理来说位运算加法运算取模运算浮点运算就不应该是同一个复杂度。
但是用这个模型分析确实最合理的。
因为计算机是人类发明的,所以计算科学自然要直接的投入实际应用。
而复杂度分析和算法构建很依赖于机器实现。
所以直接使用电子计算机去分析更加合理而实用一点。
然而,与之向矛盾的是,渐进复杂度是在数据范围趋于无穷的情况下分析出来的。
而实际情况是我们需要处理的数据范围并没有非常大。
因此,很多分析出来的理论优秀的解法,实际上都无法投入使用。
还有另一个问题,关于内存访问。
我们分析复杂度的时候假定内存访问是 \(O(1)\)。
而当数据范围不断增大的时候,内存访问效率也会随之下降。
经典例子,生信研究基因的时候,基本上都会用 SA 而不是 SAM。
其中一个原因就是,SAM 的内存访问极度不连续。
遇到基因这种数据范围超大的问题的时候效率就很低了。
因此,当数据范围不断增大的时候,复杂度优秀的算法并不一定会跑得快。
实际情况告诉我们,我们所认为的常数并不是一个常数。
所以,这告诉我们一个非常重要的道理。
记得对着标程卡常,别让暴力冲过去。。。
本来这里我想发发电来着。
然后突然发现,想要表达的东西和闲话 Day12.8 稍微有一点契合。
没想到自己写的东西,也可以解释出来另一种意思。
所以看到这里可以回去重新看一眼 Day12.8,就当是今天的内容了(
插播广告:
徽章降价,徽章降价。
只需要一个徽章就可以换一个徽章。
感觉到了这个时候就有点担心 AFO 之后的事情了。
在见识增加之后越发认为某学校的高三生活很寄了。
然而仔细考虑了各种方法,除了改变学习环境以外没有其他更可行的方法了。
显而易见的是我并没有啥自学能力。所以上述行为也不太可行。
如果没有来学 OI 的话,可能也就不会想这么多了。
倒时候高三直接正常摆烂摆过去。
压力很大但是大概也习惯了吧。
所以,见过的更广阔的东西有时候也是一种负担啊。
当然,保持一个理智而清晰的思维可能是更加重要的。
看到有不少理科生对 哲学/社会学/经济学 感兴趣。
果然这些东西都是属于理科的吗。
甚至有人专门选了文。
所以到了高三我也准备浅学一学社会学来着。
有人有推荐的资料吗。
关于世界的唯心性的探究。
虽然但是这个东西其实很难验证。
无论是唯物主义还是唯心主义,其理论都是可以自圆其说的。
很难找到逻辑漏洞。
不过,实际观测的结果相对于逻辑体系而言更具有说服力。
不管我们的解释是否是正确的,只要观测到了稳定的现象大抵就是可以拿来应用的。
鉴定为学 OI 学的。会用就行了不用证明(
一直以来,在学业这方面,最后的结果总是和最初的设想是相符的。
初中:我要进某高中。哪怕垫底进也行。
中考:恭喜,您垫底进来了。
春测后:我要进省队。哪怕垫底进也行。
省选:恭喜,您又垫底了。
这个就比较有意思啊。原理不明。
有关唯心性的实验,也就快出结果了吧。
倒时候根据实际结果再来分析吧。