闲话 Day7
去了 THUSC。
一个个的都好强啊。。。
行了直接开始学术部分吧。
回顾一下做过的两场 USACO。
简单概括一下,就是算法/数据结构学傻了。
一个黄题被我做成了紫题的难度。
所以,开始返璞归真吧。
尝试不使用高级算法/数据结构来解决问题。
文艺平衡树
啊对对对,又是文艺平衡树。
上次闲话里面使用根号分治草过去的。
但是显然 \(O(n \sqrt n)\) 比 \(O(n \log n)\) 差太多了。
虽然实际效果是比 fhq 跑得快。
考虑如何不使用平衡树来做到同样的复杂度。
发现这个题的两个性质:
- 每次只会增加 \(O(1)\) 个连续段。
- 只需要最后输出序列。
第一个性质就非常优秀,所以我们继续考虑连续段相关做法。
第二个性质提醒我们这道题是可以离线的。
因此,考虑分治。
首先把操作序列分成两部分,递归求解。
这样左右各会求解出来一个连续段。
然后考虑合并答案。
这东西其实就是做置换。
但是这样单次是 \(O(n)\) 的,总复杂度 \(O(n^2)\)。
但是考虑一个单调的连续段和另一个单调的连续段做置换。
最后出来还是连续段。
所以直接归并即可。
当然,说着容易,但是实际上很麻烦。
我们需要对每个连续段编号,然后顺着置换。
还需要用 vector
以及重新分配编号。
不过最后可以做到线性。
所以总复杂度 \(T(n) = 2T(\frac{n}{2}) + O(n) = O(n \log n)\)。
空间线性。但是看着常数就大。
另外,重点是貌似没有根号分治好打。
文艺平衡树
怎么又来了一遍。
就这么喜欢文艺平衡树吗。
我们发现,可能会存在一些毒瘤的出题人。
我们现在改一改题面:
给定一个序列 \(a\),支持以下两种操作:
1 l r
将 \([l, r]\) 这段区间翻转。2 x
查询 \(x\) 位置的值。
强制在线。
我们的分治是基于时间的,所以貌似现在这个算法废了。
真的是这样吗?
容易发现,算法本质就是先处理左半边,然后把左半边的结果当做初始序列,再处理右半边。
所以事实上我们的递归树只是建立在询问之上,并且是从左到右。
这就启发我们动态维护递归树。
具体的,我们先跑一遍空的 CDQ,给递归树建出来。
如果某个节点的两个儿子都更新完了,那么就更新这个节点。
查询的时候就遍历所有现有的节点做单点置换即可。
容易发现,任意一个时刻所有节点控制范围的并的大小不超过 \(n\)。
所以算法的空间复杂度是 \(O(n)\)。
时间的话单次置换可能可以做 \(O(1)\),然而我不会。
所以只能先二分。
二分的话总复杂度就是 \(O(n \log^2 n)\) 了。
如果有做到一个 log 的方法记得告诉我。
当然,平衡树就算了。
同样的套路可以解决很多线段树/平衡树维护区间的问题。
当然这个算法显然又难写又不优常数又大也没啥延展性,没有大病大概是不会用的。
话说线段树确实属于高级数据结构来着。
听了个关于人工智能的讲座。
主要讲的就是相关的原理一类的。
有这样一个有意思的事实。
事实上,现有的人工智能可以轻松的解决很多问题,例如写作文什么的。
但是,其数学、编程能力是非常低的。
至少和语言处理来比差了太多了。
在看到测试数据之前我确实以为 AI 更适合用来搞理科来着。
所以这是怎么会逝呢。
不妨先来考虑一个基本的问题:逻辑是什么。
看到窗外的地面都是白的,自然可以推到出来刚刚下雪了。
根据 \(\sin (a + b) = \sin a \cos b + \sin b \cos a\),自然也可以推导出来 \(\sin 2a = 2 \sin a \cos a\)。
因此,逻辑推导的过程本质上是由充分条件推导结论的过程。
对于严谨的逻辑推理,其条件必然引发其结论。
当然,其结论可能是一堆带概率的事件集。
这个是条件不充分无法得到唯一结果导致的。
所以逻辑推导本身是一个严谨的过程。
一种条件会对应唯一的一种结果。
而语言这种东西不是这样的。
显然不会有唯一解什么的。
例如“语感”之类的东西也很难去严谨的刻画,只能抽象理解。
而且每个人的理解都不一样,甚至没有统一标准。
然后我们再去考虑一下 AI 的原理。
所谓模型训练,也就是大量灌输数据集。
即通过调整参数来做到对于大多数情况是正确的。
例如,如果这个模型用来解决的问题是多项式乘法。
然后,灌输的数据集都是长度为 \(2^{10}\) 的多项式相乘。
那么如果最后给定长度为 \(2^{20}\) 的多项式,那么这东西大概率会算错。
因此,用 AI 来解决语言之类的问题就非常合适。
其相当于是提升语感的过程,和正常人学语言很类似。
但是让 AI 自行研究数学呢?
只要其逻辑有一处出了问题,那么推导出来的东西大概率就是错的。
也就是说,需要保证其参数完全无误。
这显然不现实。
而且随着逻辑深度不断增加,出错的概率也会呈指数级上涨。
这也就是 AI 不擅长搞理科的原因了。
当然,上面这句话并不是很严谨。
毕竟 AI 在生物上确实非常强。
这也就涉及到另一个新的问题了,即条件与结论的对应关系。
把水杯翻转过来。
然后水会流出来。
这个显然是一组充分条件和结论。
但是,为什么这两个东西可以联系起来?
显然是根据观测得到的。
如果仍然不理解可以试一下。记得举高高。
物理、化学、生物这些学科都是这样。
通过观测现象,把一些现象联系起来组成逻辑。
然后为了方便预测,可能还会概括出来一些定律。
这些定律在多数观测现象中都成立,所以也被视为充分的。
那么,我们去把现象交给 AI。
在大量的数据下,其参数就会按照数据做相应的变化。
或者说,总结出来了一些规律。
当我们把新的现象输入进去,也就会自动的预测结果了。
这也就是我们的理论学者做的事。
从更大的尺度讲,物理和语言都是本质混沌的。
尽管我们尽力去总结规律,但是不可避免的会出现例外。
或者说,我们总结的规律不一定是最简的,也不一定是对的。
只不过就能观测的现象而言都符合罢了。
即,科学的发展很像是一个动态的拉格朗日插值。
我们通过观测得到新的点值,然后去扩充我们的多项式系数。
可能某个时刻灵机一动,消掉了很多项。
但是,如果实际上函数是 \(F(x) = \sin^{e^x} x\) 那就不是很好了。
这样的话,即使中间的推到部分出了一点点的错误。
最后的结果可能和事实很相似。
于是也可以被认为是正确的。其差距类似于精度误差了。
所以 AI 还是可以胜任这种工作的。
至少做个数据整理和规律总结是没问题的。
而数学就是另一种东西了。
数学的规则是人为制定的。
当然,准确来说是人们从外界世界中抽象出来的一个极为理想而简洁的模型。
属于是先有了普适性的规则,然后再去正推现象。
而且既然是人为制定的,其规则也确实十分简洁。
至少最基础的规则是这样的。
相当于数学家们作为上帝,已经知晓了支配着这个世界的规则。
也就是数学中的基本事实。
现在我们需要的是根据规则去刻画这个世界。
这个是容不得一点差错的。
因此,利用计算机进行大量的严谨计算自然是没啥问题。
但是直接交给 AI 做就有点风险了。
一旦其大面积推导里面有一点点的错后面的结论就都废了。
感觉一直以来都比较喜欢想这种奇怪而没啥用的东西。
有关本质的探究能给我带来什么?
不过总比什么都不想要好一点吧。
如果连这个学科的本质和意义都不知道,那还搞啥。
不过我希望以后我不会回来翻这堆闲话了吧。
倒时候可能感觉就像现在去看小学写的作文一样了吧。
当然,有时候也会想一点现实相关的问题。
鉴于账号安全考虑显然不能发闲话。
所以你们是怎么想的所以你们是怎么想的所以你们是怎么想的所以你们是怎么想的所以你们是怎么想的所以你们是怎么想的所以你们是怎么想的所以你们是怎么想的所以你们是怎么想的所以你们是怎么想的所以你们是怎么想的所以你们是怎么想的所以你们是怎么想的。