一尘不染

Firefox的“ awesome”栏如何匹配字符串?

algorithm

问题是如何通过firefox 3 网址栏进行字符串匹配以找到匹配的条目。每个条目上的子字符串匹配可能很慢。可以使用哪种算法快速匹配任何位置?


阅读 269

收藏
2020-07-28

共1个答案

一尘不染

快速子字符串匹配的通常方法是创建一个数据结构,其中包含要搜索的所有字符串的所有后缀。根据组织的不同,这可以称为“后缀树”或“后缀数组”。例如,如果您有1000个字符串,并且每个字符串的长度为50个字符,则您将拥有1.000
x 50个平凡的后缀,即,后缀数组将具有50.000个条目。

然后要进行匹配,您可以执行二进制搜索(如果是数组)或树搜索(如果是树),以查找数据结构中所有 开头
与搜索框中写入的字符串相匹配的后缀。因为这是您要匹配的后缀的开头,所以可以使用标准搜索过程(二进制搜索,树后裔)快速获得结果。每个后缀都链接到出现的那些字符串。

示例:您有两个字符串“ CAT”和“ DOT”。您的后缀数组如下所示(注意lexiographic =字母顺序):

#1 AT  --> CAT
#2 CAT --> CAT
#3 DOT --> DOT
#4 OT  --> DOT
#5 T   --> DOT, CAT

请注意,有六个后缀,但是两个后缀是相同的(“ CAT”和“ DOT”中的最后一个“ T”),并且两者都由同一条目表示(#5)。

现在,当用户键入搜索内容时,例如“ OT”(应与“ DOT”匹配),您可以在登录时进行简单的静电学排序查询,因为您现在正在搜索后缀数组中的 开始
匹配项。

当搜索模式不包含通配符时,这是快速文本搜索的基本原理。

2020-07-28