双向迭代器是否有任何Knuth-Morris-Pratt算法实现?在Boost.Algorithm中,有随机访问迭代器的版本。
答案 0 :(得分:0)
让我们来看看标准实现。我们实际需要随机访问的唯一地方是在跳转pattern[i]
后比较i = p[i]
和当前字符。不是直接访问pattern[i]
(在最坏的情况下需要线性时间用于双向迭代器),我们可以在构建转换时将下一个字符c
与p[i]
一起存储在模式中表
然而,它并没有那么有用。为每个i
存储符号与将模式复制到支持随机访问的结构基本相同,因此直接执行它会更容易。