字典表什么意思_字典树小记

本文介绍了字典树(又称单词查找树)的基本概念,包括其用于快速字符串查找的特点,O(k)的插入和查询时间复杂度。讨论了字典树的结构特性,并通过例子展示其构建过程。同时,对比了字典树与哈希表在处理相同前缀字符串和空间效率上的优势,指出在某些场景下字典树更优。
摘要由CSDN通过智能技术生成

31357aedb9c471862089f0e4ccdc7889.png

1、基本概念

面试的时候被问到字典树,很久之前看过但已经不记得了,于是借此机会来复习一下。

字典树又称单词查找树或键树,是用于字符串快速查找的一种数据结构,它的形状像是一棵树,我们可以用字典树来查询字符串、查询字符串前缀、统计字符串数量。字典树插入和查询时间复杂度都为 O(k) ,其中k为字符串的长度,缺点是比较耗费空间。

2、字典树的结构

先来看下字典树长什么样,现有字符串["abc","ab","bd","dda"],则构造出的字典树如下。

19296de1ca360ff6f2a2e337bf3234de.png

从图中可以里看到,字典树的基本性质:

1)根节点不包含字符,除根节点外每一个节点都只包含一个字符。

2)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。

3)每个节点的所有子节点包含的字符都不相同。

4)如果字符的种数为n,则每个结点的出度为n。

5)插入查找的复杂度为O(n),n为字符串长度。

插入过程:对于一个单词,从根开始,沿着单词的各个字母所对应的树中的节点分支向下走,直到单词遍历完,将最后的节点标记为红色,表示该单词已插入字典树。

查询过程:同样的,从根开始按照单词的字母顺序向下遍历字典树,一旦发现某个节点标记不存在或者单词遍历完成而最后的节点未标记为红色,则表示该单词不存在,若最后的节点标记为红色,表示该单词存在。

对于英文来说,字典树的出度为26(表示26个字母),字典树的数据结构如下:

typedef struct Trie_node
{
	int count;                    // 统计单词前缀出现的次数
	struct Trie_node* next[26];   // 指向各个子树的指针
	bool exist;                   // 标记该结点处是否构成单词  
}TrieNode , *Trie;

3、字典树与哈希表

哈希表可以在O(1)时间内寻找键值,但是无法高效完成:

  • 找到具有相同前缀的的全部键值
  • 按字典序枚举字符串的数据集

字典树优于哈希表的另一个理由:随着哈希表大小的增加,会出现大量冲突,可能最慢的时间复杂度为O(n), 其中n为插入表中键值的个数。同时,字典树在存储多个相同前缀的键时可以使用较少空间,此时Trie树只需O(m),其中m为键长。

参考:

Trie Tree(字典树/前缀树/单词查找树)​www.jianshu.com
9a97d8d40b45de58bd030197bae554ee.png
Trie树详解及其应用_Hackbuteer1的专栏-CSDN博客​blog.csdn.net
c3528fb4d6ce353f456aea8cf9631853.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值