AC 自动机(Aho–Corasick 算法)与字符串匹配问题

据说很多公司都有这样一道面试题:给你几个 G 的字符串,让你想办法快速地找出其中的很多个需要和谐的敏感词。 这个问题里,如果“需要和谐的字符串”称为“模式串”,“待被查的字符串”称为文本串。对于这样的问题,如果暴力做,复杂度就是 $\Theta(N \ast M \ast Len)$……用 AC 自动机这种高级的算法,可以在 $\Theta (N)$ 左右复杂度内得出答案。Excited!

Read more...

Tarjan 算法求解无向图的割点与割边

在一幅无向图中,如果删除了一个点,导致图分成了两个或多个联通块(强连通分量),那么这个点就是割点。怎么求这样的点呢?最原始暴力的方法就是每次枚举一个点,删除,跑一遍最短路。今天我们可以用更高级的 Tarjan 算法 $ \displaystyle \Theta (N)$ 求解。

Read more...