Trie树-提高海量数据的模糊查询性能

本文通过实例介绍了如何使用Trie树提高在海量数据中进行模糊查询的性能。针对一个需要从大量文章标题中查找包含特定高校名称的问题,传统数组遍历方法效率低下。通过引入Trie树数据结构,实现了高效查找,减少了比较次数,大幅缩短了查询时间。文章还提供了Python版的Trie树实现代码,展示了全词匹配和模糊匹配的方法。
摘要由CSDN通过智能技术生成

今天这篇文章源于上周在工作中解决的一个实际问题,它是个比较普遍的问题,无论做什么开发,估计都有遇到过。具体是这样的,我们有一份高校的名单(2657个),需要从海量的文章标题中找到包含这些高校的标题,其实就是模糊查询。(关注公众号 渡码,回复关键词 trie 获取完整源代码)对应的伪代码如下

selected_titles = []
for 标题 in 海量标题:
  for 高校 in 高校名单:
    if 标题.contains(高校):
      selected_titles.add(标题)
      break

如果是大数据开发,对应的SQL的伪代码是这样的

select title
from tb
where 
  title rlike '清华大学|北京大学|...2657个高校'

上面这两种做法都能实现我们的需求,但它们的共同问题是查询效率太低。如果我们要匹配的高校不是2657个而是几十万甚至上百万,那这种方式耗费时之久是不可想象的。

优化这类问题通常需要在数据结构上做文章,这个问题中我们能优化的数据结构也只有“高校名单”这个了,上面的伪代码中我们存放“高校名单”的数据结构是数组,当我们查找某个title是否包含某个高校的时候,需要从头到尾遍历一遍“高校名单”,并且名单越长,遍历耗时就越长。

清楚了数组这种数据结构的缺点后,接下来我们重点要做的就是寻找一个数据结构可以做到在不遍历整个“高校名单”的情况下就可以完成模糊查询。这个数据结构就是我们今天要介绍的 Trie 树,冷眼一看这个单词有点陌生,又是一个树型结构,感觉会很复杂似的,实际上这个数据结构的设计思想非常简单,一学就会。

下面我们就来学习一下 Trie 树。为了方面讲解,假设“高校名单”里只有下面5个元素

ABC、ABD、BCD、BCE、C、CAB、CDE

对应的两种数据结构如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值