问题是如何通过firefox 3 网址栏进行字符串匹配以找到匹配的条目。每个条目上的子字符串匹配可能很慢。可以使用哪种算法快速匹配任何位置?
快速子字符串匹配的通常方法是创建一个数据结构,其中包含要搜索的所有字符串的所有后缀。根据组织的不同,这可以称为“后缀树”或“后缀数组”。例如,如果您有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”匹配),您可以在登录时进行简单的静电学排序查询,因为您现在正在搜索后缀数组中的 开始 匹配项。
当搜索模式不包含通配符时,这是快速文本搜索的基本原理。