Trie(一)

简介: 文章目录前言一、Trie二、例题,代码1.AcWing 835. Trie字符串统计关于本题:AC代码2.AcWing 143. 最大异或对关于本题AC代码三、时间复杂度

文章目录

前言

一、Trie

二、例题,代码

1.AcWing 835. Trie字符串统计

关于本题:

AC代码

2.AcWing 143. 最大异或对

关于本题

AC代码

三、时间复杂度


前言

复习acwing算法基础课的内容,本篇为讲解基础算法:Trie,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。


一、Trie

能高效的插入和查找字符串的数据结构    -------yxc


我们通过一个例子来说明什么是Trie:

例如,现我们要存储这么几个字符串:


abcdef

abedf

acef

cbde

cbdf

abc


我们按照如下方式存储:


首先我们定义一个树根:

image.png


然后把树根的初始坐标设为0,紧接着我们开始例子的插入操作:

插入abcdef

询问树根是否有a这个子节点,如果没有,则创建:


image.png

然后看a这个子节点有没有b这个子节点,如果没有则创建,剩下的也以此类推,所以插入abcdef后的图如下图所示:


image.png

紧接着我们插入abedf

还是从root开始,看有没有a的子节点,发现有,那么就就走到a这个子节点

接下来看有没有b这个字节点,发现有,那么走到b这个子节点

接下来看有没有e这个字节点,发现没有,那么创建这个子节点

image.png

接下来和之前的一样,创建d子节点和f子节点

image.png

接下来插入acef,和之前一样,插入后结果为

image.png

接下来cbde,一样从root开始,发现没有c子节点,则创建

image.png

接下来插入cbdf,和之前一样,最终结果为

image.png插入abc

我们还需要一个操作就是标记一下每一个插入的串的结尾,这样我们做查询操作的时候才能知道到底有没有这个串,比如,如果我们不标记一下结尾的话,那么对于我们插入abc这个串的时候,我们这个Trie树种已经有abc这个子串了,那么我们如果要查询是否有abc这个子串的时候,我们才能知道是真的有这个串,而不是abcdef的子串,故我们标记为:

image.png

从这个表中,我们就储存了所有的字符串,并且标记了每一个串的结尾,那么我们在查询的时候从root开始遍历到这个标记的结尾的话,就证明存在这个子串



目录
相关文章
|
4月前
|
搜索推荐
前缀树Trie
前缀树Trie
|
4月前
|
NoSQL 容器 消息中间件
字典树 (Trie)
字典树 (Trie)
|
4月前
|
存储 C++
leetcode-208:实现 Trie (前缀树/字典树)
leetcode-208:实现 Trie (前缀树/字典树)
24 0
|
6月前
|
存储 Python
字典树(Trie,
字典树(Trie,也称为前缀树或单词查找树)是一种用于存储字符串的树形数据结构。它是一种特殊的多叉树,其中每个节点都包含一个字符和一个指向其子节点的指针数组。字典树的主要作用是用于快速查找字符串和处理字符串的前缀。
35 6
|
6月前
|
算法
算法学习--KMP与Trie
算法学习--KMP与Trie
|
9月前
|
搜索推荐
字典树 trie
字典树 trie
33 0
|
10月前
|
搜索推荐 数据格式
Trie字典树
Trie字典树
59 0
Trie字典树
|
10月前
|
Web App开发 Java C++
字符串-Trie
字符串-Trie
36 0
ip_trie
ip_trie
46 0