自适应朴素字符串匹配
也叫做 carry 字符串匹配。
只是一个在大数据里亚线性被 KMP 完爆的垃圾算法啦。
某一天,弱小的 carryfish 在做某 CSP-S 初赛模拟,然后看到了一个朴素字符串匹配算法,然后他视力非常好,把匹配方向看反了,看成了从后往前比较。
然后他突然发现,如果从后往前匹配的话,是不是可以卡掉传统的:
A=aaab
B=aaaaaaaaaaaab
卡法?
但是显然,如果把 b 放在最前面,同样能卡。
于是 carryfish 想到了一种类似鸡尾酒排序的东西:先比较第一位,再比较最后一位,再比较第二位……依次类推。
但是 b 放中间就又卡掉了。
于是 carryfish 非常红温,他决定每次随机选一个没比较过的位置比较!方式就是通过一个预处理的
但是他发现:这样还是类似
于是他接着优化,他突然想到:欸,我先比较那个 b 的位置不行吗?于是这个糖糖算法的第一个要点来了:我们有一个
突然,这个算法跑很多东西都快了很多。
但是还有一个很容易想到的优化:比较当前匹配窗口的每种字符出现次数,然后我们看看是否有任何一种不同,不同就直接 continue,这个优化复杂度是
突然,carryfish 发现,虽然这种算法在
介于这太诡异了,所以想要来找找 Hack,不过貌似确实是个很神奇的朴素暴力优化算法?