实现高效的英文单词前缀匹配

Posted 沿着路走到底

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现高效的英文单词前缀匹配相关的知识,希望对你有一定的参考价值。

题目

- 先给一个英文单词库(数组),里面有几十万个英文单词

- 再给一个输入框,输入字母,搜索单词

- 输入英文字母,要实时给出搜索结果,按前缀匹配

要求

- 尽量快

- 不要使用防抖(输入过程中就及时识别)

常规思路

`keyup` 之后,拿当前的单词,遍历词库数组,通过 `indexOf` 来前缀匹配。

性能分析

- 算法思路的时间复杂度是 `O(n)`

- 外加 `indexOf` 也需要时间复杂度。实际的复杂度要超过 `O(n)`

优化数据结构

英文字母一共 26 个,可按照第一个字母分组,分为 26 组。这样搜索次数就减少很多。

可按照第一个字母分组,那也可以按照第二个、第三个字母分组

即,在程序初始化时,把数组变成一个树,然后按照字母顺序在树中查找

const arr = [
    \'abs\',
    \'arab\',
    \'array\',
    \'arrow\',
    \'boot\',
    \'boss\',
    // 更多...
]

const obj = 
    a: 
        b: 
            s: 
        ,
        r: 
            a: 
                b: 
            ,
            r: 
                a: 
      

以上是关于实现高效的英文单词前缀匹配的主要内容,如果未能解决你的问题,请参考以下文章

列出与给定前缀匹配的单词的新单词表(python 理解问题)

如何在 PHP 中匹配具有共同前缀的单词?

仅当没有给定前缀具有任意数量的空格时才匹配单词

如何在与用户给定前缀匹配的字符串向量中找到第一个单词?

获取与先前定义的字符串集匹配的字符串的所有前缀的有效结构

MySQL - 具有部分单词匹配和相关性分数的高效搜索 (FULLTEXT)