字典树(Trie)

字典树trie详解 trie 简介 在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。 Trie这个术语来自于retrieva... 阅读详情

字典树(Trie),也叫前缀树,是一个比较简单的数据结构,用来存储和查询字符串。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。例如,hello,hi,haha,ha,ga这几个单词可以用以下方式存储:

在这里插入图片描述

基本思想

字典树的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。前缀树的性质:

  1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。
  2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
  3. 每个节点的所有子节点包含的字符都不相同。

字典树查询和哈希查询之间的区别:

  1. 字典树的查询时间复杂度是 O ( L ) O(L) O(L),L是字符串的长度。哈希查询的时间复杂度为 O ( 1 ) O(1) O(1)。因此,在查询一整个单词的时候,哈希查询比较快。
  2. 哈希查询不支持动态查询,即查看单词时不能查找单词的一部分。

代码实现

其核心代码为:

public class Template {

    class TreeNode {
        int count = 0;
        int prefix = 0;
        TreeNode[] chd = new TreeNode[26];
    }

    /**
     * 插入单词
     *
     * @param node
     * @param word
     */
    public void insert(TreeNode node, String word) {
        if (word == null || word.length() == 0) return;
        int len = word.length();
        for (int i = 0; i < len; i++) {
            int pos = word.charAt(i) - 'a';
            if (node.chd[pos] == null) node.chd[pos] = new TreeNode();
            node = node.chd[pos];
            node.prefix++;
        }
        node.count++;
    }

    /**
     * 查找对应的结点
     *
     * @param node
     * @param word
     * @return
     */
    public TreeNode searchNode(TreeNode node, String word) {
        if (word == null || word.length() == 0) return null;
        int len = word.length();
        for (int i = 0; i < len; i++) {
            int pos = word.charAt(i) - 'a';
            if (node.chd[pos] == null) return null;
            node = node.chd[pos];
        }
        return node;
    }

    /**
     * 查找单词
     *
     * @param node
     * @param word
     * @return
     */
    public int searchWord(TreeNode node, String word) {
        TreeNode target = searchNode(node, word);
        if (target == null) return 0;
        return target.count;
    }

    /**
     * 查看前缀
     *
     * @param node
     * @param word
     * @return
     */
    public int searchPrefix(TreeNode node, String word) {
        TreeNode target = searchNode(node, word);
        if (target == null) return 0;
        return target.prefix;
    }

    public static void main(String[] args) {
        Template temp = new Template();
        TreeNode node = temp.new TreeNode();
        temp.insert(node, "hello");
        temp.insert(node, "hi");
        temp.insert(node, "haha");
        temp.insert(node, "ha");
        System.out.println(temp.searchPrefix(node, "h"));
        System.out.println(temp.searchWord(node, "ha"));
    }
}

参考文献:

  1. 数据结构与算法:字典树(前缀树)
  2. 算法学习笔记(43): 字典树
Polymarket链上预测市场自动化交易代理开发实战指南 自动化交易代理是量化交易的核心工具,它通过预设的算法规则,自动执行市场分析、决策与下单操作,旨在提升交易效率与纪律性。其技术原理通常涉及实时数据获取、策略引擎计算、交易执行与风险管理等模块的协同工作。在区块链与DeFi领域,这类代理的价值尤为凸显,能够高效处理链上合约交互,捕捉去中心化市场的套利机会。具体到应用场景,链上预测市场如Polymarket,为自动化策略提供了丰富的博弈标的。本文以Polymarket交易代理项目为例,深入剖析其基于Node.js与ethers.js的技术栈实现,详解从环境配置、策 阅读详情

相关推荐

中兴U30air随身WiFi刷机全攻略:从ABD开启到系统调试(附工具包)

本文提供中兴U30air随身WiFi刷机全攻略,从ADB开启到系统调试的详细步骤,包括必备工具清单、ADB调试模式解锁、Bootloader解锁及自定义ROM刷入与调优。适合技术爱好者深度定制设备,提升网络性能和功能扩展。

weixin_29235923的博客 1932

字典树Trie

字典树字典树——Trie树,又称为前缀树(Prefix Tree)、单词查找树或键树,是一种多叉树结构。

一只程序猿 9728

Simulink与CANape联动教程:模型调试阶段如何快速标定参数观测信号

本文详细介绍了如何通过Simulink与CANape联动,实现模型参数的实时标定与信号观测,从而避免反复编译,提升开发效率。核心在于正确配置Simulink中的标定量与观测量,生成A2L描述文件,并利用XCP协议建立通信,为新能源汽车与自动驾驶系统的快速原型开发提供高效解决方案。

weixin_29006187的博客 376

字典树(Trie/前缀树)

Trie 字典树 前缀树

good good study, day day up! 7867

TI C2000 DSP CLA实战:用F28069的协处理器实现ADC采样与PWM相位实时联动控制

本文详细介绍了如何利用TI C2000系列DSP的CLA协处理器在TMS320F28069上实现ADC采样与PWM相位的实时联动控制。通过CLA的零周期上下文切换和硬件级任务触发特性,显著提升了电机控制和数字电源应用的实时性能,特别适用于需要亚微秒级响应的场景。

weixin_30932215的博客 3966

从零搭建宝兰德BES单机版:分离式安装、环境变量配置到控制台访问的避坑指南

本文详细介绍了从零搭建宝兰德BES单机版的完整流程,包括分离式安装、环境变量配置和控制台访问的避坑指南。针对中间件安装部署中的常见问题,提供了账号规划、JDK配置、实例创建和防火墙设置等实用解决方案,帮助开发者和运维人员高效完成BES中间件的部署工作。

weixin_32576389的博客 371

字典树(Trie) 详解

字典树(Trie),又称为或,是一种用于高效和字符串集合的数据结构,特别适合处理大量字符串的前缀匹配问题。它是一种结构,每个节点代表一个字符串的字符。以为例。下面是一个简单的的实现。它代表中的一个节点,用于存储字符和状态信息。依次插入 “apple”, “bana”​。

qq_55264624的博客 1718

STRING数据库的蛋白质相互作用(PPI)网络分析

在转录调控相关的文献中,我们经常能够看到这样的蛋白质相互作用网络(protein protein interaction network,PPI network)。具体而言,这些相关的文献中首先通过RNA-seq、表达谱芯片或者蛋白质组分析等,找到了在不同分组样本间一系列的差异表达基因或蛋白。

weixin_43029125的博客 9450

Trie字典树详解

Trie树,又叫字典树,前缀树(Prefix Tree),单词查找树,是一种多叉树的结构.上图就是一颗Trie树,表示了关键字集合根节点不包含字符,除根节点外每一个节点都只包含一个字符从根节点到某一节点,路径上的字符连接起来,为该节点对应的字符串每个节点的所有子节点包含的字符都不相同.算法核心:利用字符串的公共前缀来减少查询时间,最大限度的减少无畏字符串的比较.单词检索统计和排序字符串字符串前缀搜索我们来看一个场景:当我们在浏览器的搜索框中打出一个字符串的前缀时,它便实时的单词自动补齐.对于。

smf12138的博客 2322

STM32 I²C外设深度解析:时序配置、主从模式与可靠性工程

I²C是一种广泛应用于嵌入式系统的同步串行总线协议,其核心在于精确的时序控制与可靠的电气特性匹配。理解SCL/SDA信号建立/保持时间、上升下降沿约束及硬件滤波机制,是保障通信稳定的基础;STM32通过I2C_TIMINGR寄存器实现对PRESC、SCLH、SCLL、SDADEL和SCLDEL等关键参数的精细调控,直接影响tSU:DAT、tVD:DAT等标准时序合规性;该能力支撑工业级高可靠场景下的主从双向通信、时钟拉伸管理与错误恢复;本文聚焦STM32平台,结合寄存器级配置、状态机行为与实战调试经验,系统

weixin_42146230的博客 87

化工管道设计软件:CAESAR II二次开发_(6).API接口与函数库

自定义函数库是开发者根据特定需求编写的函数集合。这些函数可以扩展CAESAR II的功能,实现更复杂的管道设计任务。自定义函数库通常需要开发者具备一定的编程基础,能够理解和编写与CAESAR II接口兼容的代码。定义函数:在Python或其他编程语言中定义所需的函数。注册函数:将自定义函数注册到CAESAR II的函数库中。调用函数:在CAESAR II中调用自定义函数,实现特定功能。假设我们需要创建一个自定义函数库,用于批量修改管道节点的坐标。定义函数:在Python中定义一个函数,用于批量修改节点坐标。

kkchenjj的博客 1728

Trie字典树

Trie字典树和我们以前学的树结构不同,他是直接从根节点遍历到叶子节点,这样重复就完成了字典树 每个节点有若干个指向下一个节点的指针,考虑不同的语言,不同的情境。我们要有一个判断单词,还有从一个节点到下一个节点的映射具体的实现代码如下: private class Node{ public boolean isWord; public TreeMap<Character,Node&g...

DramaLifes的博客 316

V-Mamba:2D 选择性扫描状态空间模型图像分类

V-Mamba CIFAR-10 分类链路:32² RGB → Stem Conv (3→64ch, stride2→16²) → VMambaBlock ×4 (SS2D 四方向 → Mamba S6 扫描 → MLP) → GAP → Linear → 10 类。核心贡献:SS2D 四方向扫描将 2D 空间建模转为 4 个 1D 序列, 计算复杂度从 O(N²) 降至 O(N)。建议先从 CIFAR-10 dim=64 depth=4 验证 SSM 收敛性;

FJN110的博客 70

字典树-Trie详解

算法竞赛

cql666555的博客 1644

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Trie(字典树)

本文主要介绍了 Trie(前缀树/字典树)这一高效存储和检索字符串集合的树形数据结构,并给出相关实现~

2201_75479723的博客 1208

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Trie树(字典树)

Trie树,又叫字典树前缀树(Prefix Tree)单词查找树或键树,是一种多叉树结构。如下图:上图是一棵Trie树,表示了关键字集合{“a”, “to”, “tea”, “ted”, “ten”, “i”, “in”, “inn”}。根节点不包含字符,除根节点外的每一个子节点都包含一个字符。从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。每个节点的所有子节点包含的字符互不相同。通常在实现的时候,会在节点结构中设置一个标志,用来标记该结点处是否构成一个单词(关键字)。

2301_80224556的博客 2781

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数据结构之字典树Trie

文章目录Trie 字典树 前缀树什么是Trie基本概念基本性质应用场景优点手写一个trieTrie字典树的前缀查询实现Trie(前缀树) LeetCode208添加与搜索单词 - 数据结构设计LeetCode 211键值映射LeetCode677 Trie 字典树 前缀树 什么是Trie 基本概念 字典树,又称为单词查找树,Trie树,是一种树形结构,它是一种哈希表的变种。 基本性质 根节点...

qq_24095055的博客 723

字典树 Trie

摘要:字典树(Trie)是一种高效存储和检索字符串的数据结构,核心通过前缀共享节省空间。本文介绍了字典树的历史背景及数据结构原理,详细阐述了其Java实现方法,包括节点设计、插入元素和前缀检索功能。通过测试案例验证了字典树能快速检索所有指定前缀的单词,适用于海量词汇的存储和查询。字典树的时间复杂度为O(n),在索引长度限制下具有较高查询效率。

weiye2012的博客 662

trie树(字典树)

字典树(Trie),也称为前缀树或单词查找树,是一种用于存储字符串集合的数据结构,特别适用于处理前缀相关的问题。字典树的基本特点是通过共享公共前缀来节省存储空间,并且可以高效地进行字符串查询操作。

buaichifanqie的博客 1657

算法 {Trie字典树}

1

qq_66485519的博客 394

trie字典树

Trie字典树 哈希的一个变种 原理类似于字典的查找 如一个集合里面有"ab", "abc", "abd", "ca", "cd", "ef", "ha", "hai","hag" "hk" 我要查找"hag"    画图解题很肿要 dictionary : { "ab", "abc", "abd", "ca", "cd", "ef", "ha", "hai","hag" "hk"

leo_wanta的专栏 1358

字典树·Trie

Trie是一种高级的数据结构,用来统计多个字符串的查找,由于查找方式和内容和字典很想,所以被称为字典树 所以——只要你会查字典,你就会trie 来看一张图 我们现在这里有一个字典如上图,那么在字典里我们想把一个词给插进去,要怎么做呢,比如我们插入“清华园”,那么我们就先找“清”字,再找“华”,但是没有园,所以我们在华下面连到园 所以trie的插入和这个差不多,每次去找下一个字符,如果没有就建一个...

NephrenRuqInsania 251

[c++算法] 字典树 Trie 详解

哈喽大家好,我是doooge,今天给大家带来Trie的详解。字典树Trie详解。

doooge_awa的博客 1218

字典树 (Trie)

字典树 (Trie)

qq_46118239的博客 1026

Trie字典树入门+例题详解

字符串算法的总结到了Trie字典树这里,个人感觉Trie字典树不难,无论是思想还是代码部分,都是很容易理解的,但是作为AC自动机的前置知识,我们还是要好好学习一下的。 简介 字典树,也称 Trie 或字母树,指的是某个字符串集合对应的形如下图所示的有根树。树的每条边上恰好对应一个字符,每个顶点代表从根到该结点的路径所对应的字符串(将所有经过的边上的字符按顺序连接起来)。有时我们也称 Trie 上的边为转移,顶点为状态。 字符串集合{“AAA” “AAG” “T” “TCA” “TG”} 顶点上还能存储.

hhhcbw的博客,欢迎各位来访 864
上一篇: 最大公约数和最小公倍数(GCD & LCM)—简写版
下一篇: 置换环(Substitution Loop)
小菜2小白
博客等级 码龄4年 4粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值