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

本文探讨了如何实现高效的英文单词前缀匹配。在给定一个包含几十万个单词的词库和一个输入框的情况下,要求实时按前缀匹配提供搜索结果。常规方法是通过keyup事件后遍历词库,但效率较低。为了优化,提出了利用字母分组构建树形数据结构的方法,将时间复杂度从O(n)降低到O(m),显著提升了搜索速度。
摘要由CSDN通过智能技术生成

题目

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

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

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

要求

- 尽量快

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

常规思路

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

性能分析

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

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

优化数据结构

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

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

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

const arr = [
    'abs',
    'arab',
    'array',
    'arrow',
    'boot',
    'boss
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值