[数据结构]——大白话讲解前缀树

前缀树

今天给大家讲解一下什么是前缀树,但是这篇文章并不是站在数据结构研发者的角度来讲解的,因为相信很多读者都和笔者一样也才是接触数据结构不久的小白,笔者写文章之前也看过很多描写前缀树的文章,如july大神讲解前缀树。但是这些文章大多数都讲的太过高深,并且大佬们的前缀树也都不是那么容易实现。所以今天笔者尽可能将这个数据结构给大家讲的简单一些。

大佬们的前缀树

前缀树概念:Trie树,即字典树,又称单词查找树键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。(其实就是想说他使用了哈希的思想)

来看看一颗真正意义上的前缀树模型,我们虽然在后面会把某些知识简化,但是真正完整的树模型还是有必要看看的。
在这里插入图片描述
来看看这颗树有什么关键部分组成的:
在这里插入图片描述

  • 树节点:树的节点中存放的是状态,判断字符串是否走到结尾了
  • 边:每个边上有一个字符,从根开始的路径上的字符组成了串

说到这你可能还是不明白树节点中的状态有什么用,那么我们来一起用边上的字符组成一个串把。
在这里插入图片描述
仔细理解这个图,我们就会发现,如果我们接着往下走,abcd也是一个存在树中的串。说到这里,相信你已经理解了怎么从树中查找一个字符串,但是我相信你一定会有和笔者的困惑。
如何在树节点中存储状态呢?这是小问题,大问题是:怎么将字符存到这些所谓的边上呢?

在笔者看了很多大佬的代码之后,最后发现我们可以实现一颗简单一些的前缀树

小白们的字典树

基于我们没必要实现一颗真正意义上的原生前缀树,这里我们不妨来实现一颗可以用来查找仅仅由小写字母组成的前缀树吧。

先来一起看看我们的树模型吧:
在这里插入图片描述
要明白我们的树的结构,不得不着重给大家介绍这个不寻常的数组:

这个数组中,只有第二个位置我们画了一个箭头,这个箭头指向了下一个相似的这样的数组,而这个箭头所处数组的位置是字符b要映射的位置,实际上就是表明了这个节点中此位置的b字符存在
在这里插入图片描述
现在我们来看看如何表示一个abc串:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值