2007年3月13日星期二

Boyer-Moore算法

另一种字符串匹配算法。设字符模板P的长度为 n,目标文本S的长度为 l 其预处理时间为O( n),查找的时间在最坏情况下是O( l ),平均时间为O( l / n)。

和KPM算法相比,尽管具有同样的时间复杂性(甚至更优),但实际上,由于其需要事先构造2个表:一个是GC表,构造时间为O( size of charset);第二个是GS表(Boyer他们称之为RPR表),构造时间至少也要O( n)。所以无论从空间上还是时间上,都比KPM耗费更多。但如果字符模板和目标文本都比较长的话,BM算法却具有更优秀的实际运行效率。

具体算法见Boyer和Moore的论文:A Fast String Searching Algorithm

GS表的构造比较复杂,在论文中并没有给出实现的算法,于是我自己设计了一个算法,接近于O( n)。

没有评论: