Trie 树详解

Trie 树详解

Trie 树(字典树)是一种用于高效存储和搜索字符串集合的树状数据结构。它的主要特点是能够在O(N)时间内实现字符串的插入、删除和搜索操作,其中 N 是字符串的长度。Trie 树的结构适用于敏感词过滤、单词搜索、自动补全等场景。在本文中,我们将详细解析 Trie 树的基本概念、构建方法和应用。

一、基本概念

1.节点(Node):
Trie 树的每个节点表示字符串的一个字符,包含一个字符值和指向子节点的指针。根节点表示空字符串。

2.边(Edge):
边是连接节点的路径,每条边上都有一个字符值。通过从根节点开始,沿着边的路径,我们可以得到一个字符串。

3.根节点(Root):
根节点是 Trie 树的顶端节点,不包含字符值。

4.叶子节点(Leaf):
叶子节点表示字符串的结束,即从根节点到当前节点的路径构成一个完整的字符串。

二、构建 Trie 树

Trie 树的构建过程主要包括插入操作。以下是一个基本的 Trie 树的插入算法:

  1. 从根节点开始,取字符串的第一个字符。
  2. 查找当前节点的子节点中是否有这个字符:
  • 如果有,则移动到该子节点。
  • 如果没有,则创建一个新的节点,并将它作为当前节点的子节点。
  1. 重复步骤2,直到字符串的所有字符都插入完成。
  2. 将最后一个节点标记为叶子节点,表示字符串的结束。

下面是一个简单的 PHP 代码示例,用于构建 Trie 树:

class TrieNode {public $children = [];public $isEndOfWord = false;
}class Trie {private $root;public function __construct() {$this->root = new TrieNode();}public function insert($word) {$node = $this->root;$length = strlen($word);for ($i = 0; $i < $length; $i++) {$char = $word[$i];if (!isset($node->children[$char])) {$node->children[$char] = new TrieNode();}$node = $node->children[$char];}$node->isEndOfWord = true;}
}

Trie 树的搜索

Trie 树的搜索操作是其重要的功能之一。以下是一个基本的搜索算法:

  1. 从根节点开始,取字符串的第一个字符。
  2. 查找当前节点的子节点中是否有这个字符:
  • 如果有,则移动到该子节点。
  • 如果没有,则创建一个新的节点,并将它作为当前节点的子节点。
  1. 重复步骤2,直到字符串的所有字符都插入完成。
  2. 将最后一个节点标记为叶子节点,表示字符串的结束。

下面是一个 PHP 代码示例,用于搜索 Trie 树中是否存在指定的字符串:

在这里插入代码片class Trie {// ...(之前的代码)public function search($word) {$node = $this->root;$length = strlen($word);for ($i = 0; $i < $length; $i++) {$char = $word[$i];if (!isset($node->children[$char])) {return false;}$node = $node->children[$char];}return $node->isEndOfWord;}
}

Trie 树的应用

1.敏感词过滤:
Trie 树可用于高效过滤敏感词汇。将敏感词插入 Trie 树中,对用户输入的文本进行搜索,快速判断是否包含敏感词。

2.前缀匹配和自动补全:
Trie 树支持按前缀搜索,可用于实现自动补全功能。例如,输入一部分单词,即可从 Trie 树中找到匹配的单词列表。

3.单词搜索游戏:
Trie 树可用于实现单词搜索游戏。通过构建 Trie 树,玩家可以在字母矩阵中查找构成的单词。

4.IP 路由表:
Trie 树可以用于构建 IP 路由表,以提高路由查找效率。每个节点表示 IP 地址的一部分,树的深度表示 IP 地址的位数。

5.编码和压缩:
Trie 树可用于实现字符串的编码和压缩。通过将重复的字符串存储在 Trie 树中,可以实现对文本的高效编码。

总结

Trie 树是一种强大的数据结构,适用于存储和搜索字符串集合。通过构建 Trie 树,可以实现高效的插入、删除、搜索等操作。其应用领域涉及文本处理、搜索引擎、网络路由等多个领域。理解 Trie 树的基本概念和操作流程,有助于更好地应用和优化算法。在实际开发中,根据具体场景和需求,可以选择不同的实现方式和优化策略。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/218472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HarmonyOS】【DevEco Studio】安装教程及环境配置问题解决

目录 一、DevEco Studio 安装二、配置环境ohmp安装报错问题解决方法一&#xff1a;注册表删除数值&#xff08;没解决&#xff09;方法二&#xff1a;进入DevEco Studio点击Settings进入设置&#xff08;没解决&#xff09;方法三&#xff1a;自己去官网下载ohmp的包安装&#…

PR片头模板|圣诞节快乐视频片头模板 Merry Christmas Logo

Merry Christmas logo 圣诞节快乐片头模板PR视频剪辑素材免费下载。 3个文本层。 9秒持续时间。 轻松的颜色控制。 After Effects and Premiere Pro 2021或更高版本。 全高清&#xff08;19201080&#xff09;. 不需要插件。 包括视频教程. 不包括音频。 快速渲染。 来自PR模板…

Corona最新渲染器Corona11详解,附送下载地址

近日&#xff0c;Corona进行了大版本更新&#xff0c;发布了最新的Corona11。这次更新&#xff0c;包含众多新功能和新修复&#xff0c;借助 Corona 11 用户可将作品提升到更高的创作水准&#xff0c;更真实可感的视觉水平。 那么更新了那些呢&#xff1f;一起来看看吧&#x…

zookeeper1==zookeeper源码阅读,源码启动ZK集群

下载源码 Tags apache/zookeeper GitHub https://codeload.github.com/apache/zookeeper/zip/refs/tags/release-3.9.1 JDK8 MAVEN3.8.6 mvn -DskipTeststrue package 配置ZK1 zkServer.cmd中指出了启动类是 QuorumPeerMain QuorumPeer翻译成集群成员比较合理&#xf…

el-table/avue-curd 相同列内容合并

1.效果 2.html 3.js spanMethod({ row, column, rowIndex }) {if (column.property deviceName) {if (rowIndex > 0 && row.deviceName this.data[rowIndex - 1].deviceName) {return {rowspan: 0,colspan: 1,};}let rowspan 1;for (let i rowIndex 1; i < …

Windows提权方法

简介 内网提权&#xff0c;本意为通过某些服务的漏洞&#xff0c;从而获取到该服务器的shell&#xff0c;进而内网渗透&#xff0c;最终从普通用户变成超级管理员的一个过程 以下是一些常见的内网提权原理和方法&#xff1a; 横向移动&#xff1a;攻击者通过在内网中的一台受感…

学校家委会的职责和作用

在教育领域&#xff0c;学校家委会是一个不可或缺的角色。那么&#xff0c;学校家委会的职责和作用是什么呢&#xff1f;作为家长&#xff0c;我们又该如何参与其中呢&#xff1f;接下来&#xff0c;我将以知乎的口吻&#xff0c;为大家解答这些问题。 先让我们了解一下学校家委…

选品大作战:通过飙升榜找到了1000个爆款

通过商品飙升榜我发现了1000多个超级爆款&#xff01;赶超空间还很大。 店铺想要有流量、有销量&#xff0c;必须要会打造爆款&#xff01;打造的前提是会找到爆款。 拼多多每段时间都会有不少产品发生变化&#xff0c;在拼多多大幅爆单的&#xff0c;销售排名上升千万的商品…

YB2416D 30V 输入,3A 输出,CCCV 控制,高效率同步降压转换器

YB2416D 30V 输入&#xff0c;3A 输出&#xff0c;CC&CV 控制&#xff0c;高效率同步降压转换器 概述: YB2416是一款输入耐压超过40V,在4.5V-30V输入电压条件下正常工作&#xff0c;并且能够实现精确恒压以及恒流的同步降压型DC-DC转换器。YB2416内部集成80m2的上管和40m2…

Linux高级管理--安装MySQL数据库系统

MySQL服务基础 MySQL.是一个真正的多线程、多用户的SQL数据库服务&#xff0c;凭借其高性能、高可靠和易于使 用的特性&#xff0c;成为服务器领域中最受欢迎的开源数据库系统。在2008年以前&#xff0c;MySOL项目由MySQL AB公司进行开发&#xff0c;发布和支持&#xff0c;之后…

多模态统计图表综述:图表分类,图表理解,图表生成,图表大一统模型

Overview 多模态统计图表综述一、图表分类1.1 Survey1.2 常见分类数据集&#xff1a;1.3 常见图表类型 二、图表理解2.1 VQA2..1.1 DVQA CVPR20182.1.2 PlotQA 20192.1.3 ChartQA 2022 2.2 Summary2.2.1 Chart-to-text ACL 2022 三、图表生成四、图表大一统模型4.1 UniChart 20…

RHEL8_Linux使用podman管理容器

本章主要介绍使用 podman 管理容器 了解什么是容器&#xff0c;容器和镜像的关系安装和配置podman拉取和删除镜像给镜像打标签导出和导入镜像创建和删除镜像 1.了解容器及和镜像的关系 对于初学者来说&#xff0c;不太容易理解什么是容器&#xff0c;这里举一个例子。想象一下…

电线电缆行业生产管理MES系统解决方案

电线电缆行业生产管理mes系统核心功能 基础数据管理&#xff1a;对基础数据进行统一管理&#xff0c;包括组织架构、原材料数据、设备数据、报工数据、检验数据、员工数据等工艺与BOM管理&#xff1a;对工艺标准进行统一管理&#xff0c;包括工艺的版本管理、关联型号管理&…

结构化并发 ForkJoinPool StructuredTaskScope

Java 通过引入结构化并发 API 简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单一工作单元&#xff0c;从而简化错误处理和取消操作、提高可靠性并增强可见性 结构化并发由 JEP 428 提出&#xff0c;并在 JDK 19 作为孵化API。它由 JEP 437 在 JDK 20 中重新孵化…

在linux服上使用nginx+tomcat部署若依前后端分离版本(RuoYi-Vue)

一、先拉工程&#xff0c;地址&#xff1a;RuoYi-Vue: &#x1f389; 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue & Element 的前后端分离权限管理系统&#xff0c;同时提供了 Vue3 的版本 二、在window上用idea打开跑通&#xff0c;可参考…

vue 实现签字功能

1、安装&#xff1a;npm install vue-esign --save 2、main.js文件中全局引入&#xff1a; // 签字 import vueEsign from vue-esign Vue.use(vueEsign) 3、页面内容 <vue-esign ref"esign" :width"800" :height"300" :isCrop"isCro…

Leetcode—112.路径总和【简单】

2023每日刷题&#xff08;五十七&#xff09; Leetcode—112.路径总和 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …

LINUX:如何以树形结构显示文件目录结构

tree tree命令用于以树状图列出目录的内容。 第一步&#xff0c;先安装tree这个包 sudo apt-get install tree 第二步&#xff0c;在指定文件目录输入下面命令&#xff0c;7代表7级子目录 tree -L 7 第三步&#xff0c;效果图 第四步&#xff0c;拓展学习 颜色显示 tree -C显…

用Rust刷LeetCode之26 删除有序数组中的重复项

26. 删除排序数组中的重复项[1] 难度: 简单 老的描述: 新的描述: 注意是 排序数组,非严格递增排列,即已经是排好序的,只不过有重复元素 func removeDuplicates(nums []int) int { if len(nums) 0 { return 0 } i : 0 for j : 1; j < len(nums); j { …

[LLM]nanoGPT---训练一个写唐诗的GPT

karpathy/nanoGPT: The simplest, fastest repository for training/finetuning medium-sized GPTs. (github.com) 原有模型使用的莎士比亚的戏剧数据集, 如果需要一个写唐诗机器人&#xff0c;需要使用唐诗的文本数据&#xff0c; 一个不错的唐诗&#xff0c;宋词数据的下载…