Tir( 字典树)入门及实现

C++高级数据结构算法 | Tire树(字典树、前缀树) Trie树的基本概念与应用场景、 Trie树的结构定义、单词插入操作、单词查找操作、前缀查询、删除算法、销毁操作、 LeetCode 208 实现 Trie (前缀树) 题解 阅读详情
Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。 典型应用是用于统计和排序大量的字符串(但不仅限于字符串), 所以经常被搜索引擎系统用于文本词频统计。

它的优点是:
  利用字符串的公共前缀来节约存储空间,最大限度的减少无谓的字符串比较,查询效率比哈希表高。

  比如说我们想储存3个单词,sky、skyline、skymoon。如果只是单纯的按照以前的字符数组存储的思路来存储的话,那么我们需要定义三个字符串数组。但是如果我们用字典树的话,只需要定义一个树就可以了。在这里我们就可以看到字典树的优势了。

它有三个基本性质:
(1)根节点不包含字符;
(2) 除根节点外每一个节点都只包含一个字符:

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


Java实现:

import java.util.Scanner;
public class TireTree {
	public static void main(String args[]){
		Scanner in=new Scanner(System.in);
		int inNum=in.nextInt();
		for(int i=0;i<inNum;i++){
			insert(in.next());
		}
		int countNum=in.nextInt();
		for(int j=0;j<countNum;j++){
			System.out.println(countNum(in.next()));
			System.out.println(isExist(in.next()));
		}
	}
	public static TireNode root=new TireNode();
	private static class TireNode{					   //字典树节点
		private int num;                               //通过这个节点的数量,即单词的个数
		private TireNode[] son;                        //这个节点的子节点
		private boolean isEnd;                         //是不是最后一个节点
		private char value;                            //节点字符的值
		TireNode(){
			num=1;
			son=new TireNode[26];
			isEnd=false;
		}
	}
	public static void insert(String str){            //把单词插入字典树
		if(str==null||str.length()==0){
			return;
		}
		TireNode node=root;
		char[] toChar=str.toCharArray();
		for(int i=0;i<str.length();i++){
			int posNum=toChar[i]-'a';
			if(node.son[posNum]==null){
				node.son[posNum]=new TireNode();
				node.son[posNum].value=toChar[i];
			}else{
				node.son[posNum].num++;
			}
			node=node.son[posNum];
		}
		node.isEnd=true;
	}
	public static int countNum(String str){          //统计字典树中含有此前缀的个数
		if(str==null||str.length()==0){
			return -1;
		}
		TireNode node=root;
		char[] toChar=str.toCharArray();
		for(int i=0;i<str.length();i++){
			int posNum=toChar[i]-'a';
			if(node.son[posNum]==null){
				return 0;
			}else{
				node=node.son[posNum];
			}
		}
		return node.num;
	}
	public static boolean isExist(String str){      //判断树中单词是否存在
		if(str==null||str.length()==0){
			return false;
		}
		TireNode node=root;
		char[] toChar=str.toCharArray();
		for(int i=0;i<str.length();i++){
			int posNum=toChar[i]-'a';
			if(node.son[posNum]==null){
				return false;
			}else{
				node=node.son[posNum];
			}
		}
		return node.isEnd;
	}
}


实战指南 | 利用TSMaster的C小程序实时监控DBC报文发送周期 本文提供了一份利用TSMaster的C小程序实时监控DBC报文发送周期的实战指南。通过创建用户变量、编写C小程序核心逻辑并关联图形模块,工程师可以直观地可视化关键报文(如ID 0x64)的发送间隔,从而快速发现周期异常,提升汽车电子开发和测试中总线问题定位的效率与实时性。 阅读详情

相关推荐

Halcon形状模板匹配实战:inspect_shape_model参数优化指南

本文深入解析Halcon形状模板匹配中inspect_shape_model参数的优化技巧,涵盖NumLevels和Contrast参数的实战应用。通过具体案例展示如何平衡匹配速度与精度,帮助开发者高效调试形状模型,提升工业视觉检测的准确性和效率。

weixin_30342209的博客 618

数据结构4:Tire树入门

以下来源于百度百科: 在计算机科学中,Trie,又称字典树、单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串)。 特点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 核心思想:空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率。 例如:如给出字符串"abc","ab...

GD_ONE的博客 2965

Android15 AndroidV冻结和解冻的场景

cgroup 最初由 Google 工程师 Paul Menage 和 Rohit Seth 在 2006 年提出,是一种细粒度资源控制的Linux内核机制。于 2007 年合并到 Linux 内核主线中。然而 Google 原生系统直到 Android 11 或更高版本上才支持 CACHE 应用的 CPU 冻结功能。当应用切换到后台并且没有其他活动时,系统会在一定时间内通过状态判断,将进程 ID 迁移到冻结的 cgroup 节点上,实现冻结 CACHE 应用。

苏法迪的专栏 1786

TireTree前缀树

前缀树(Trie),也叫单词查找树 典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 它的基本性质如下: 根节点不包含字符,除根节点外每一个节点都只包含一个字符。 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。 每个节点的所有子节点包含的字符都不相同。 前缀树常用的有如下4个操作: 1.插入字符串: void insert(string str) 遍历字符串,沿途经过的pa

ZZHinclude的博客 360

常规波束形成——时域波束形成、频域波束形成

本文介绍了波束成形,包括时域波束成形和频域波束成形,并解释了在实现过程可能存在疑惑的相位补偿。

Candy_Editor的博客 3657

告别手动标注!PDMS NakiToolkit插件安装与初体验:以Pipeline工具为例

本文详细介绍了PDMS NakiToolkit插件的安装与使用,特别是其Pipeline工具如何通过自动化标注和材料统计功能大幅提升三维工厂设计效率。从环境准备到实战演示,帮助工程师告别繁琐的手动标注工作,实现项目交付周期的大幅缩短。

weixin_30047059的博客 350

算法: TireNode解决搜索词212. Word Search II

212. Word Search II Given an m x n board of characters and a list of strings words, return all words on the board. Each word must be constructed from letters of sequentially adjacent cells, where adjacent cells are horizontally or vertically neighboring. T

AI架构师易筋 391

“/usr/lib/wsl/wsl-setup“ failed, exiting

WSL2安装Ubuntu时出现"wsl-setup failed"错误的解决方法 摘要:当Windows用户名包含中文字符时,安装WSL2+Ubuntu会出现"wsl-setup failed"错误。本文提供两种解决方案:1)修改中文用户名(风险较大);2)通过命令手动配置。推荐第二种方法:先使用"wsl -l -v"查看Ubuntu名称,再通过"wsl -d Ubuntu20.04 -e /bin/bash"命令启动WSL2系

猿小白的博客 994

算法学习之:动态树(link-cut-tree)及bzoj3282Tree例题详解

算法学习之:动态树(link-cut-tree,下文简称lct) 前言: 经过大神对lct的各种狂吹之后,作为蒟蒻一只的我就来学习lct了,%了几份博客之后,大概明白了lct是怎么做。发现其实lct好像并没有想想中的那么难。当然lct的最低门槛是splay,其次当然就是树链剖分。当然理论上来说树链剖分不看的话lct其实可学,但是可能光是理解就要好久。所以想学lct的小伙伴们还是先去学学spla

maxtir的博客 2860

SAP FI 会计科目表(COA)可直接套用配置模板

摘要:本文提供了SAP S/4HANA环境下可直接套用的会计科目表(COA)配置模板,包含科目编码规则、号段规划、科目组设置等核心内容。模板采用10位数字编码,按资产(1000)、负债(2000)、权益(3000)、成本(4000)、收入(5000)、费用(6000)六大类划分号段,并预设科目组控制字段状态。适用于集团/单一公司、国内/跨国企业场景,支持多表架构映射,配置完成后可通过事务码SAKO验证科目清单。模板遵循"前4位固定一级科目"原则,企业可根据行业特性调整明细科目。

金牌架构师 266

# YOLOv11-seg改进系列 | 引入CVPR MetaFormer的C3k2_PoolingFormerCGLU模块,池化Token混合+CGLU门控MLP

本文引入 CVPR 2022 论文(MetaFormer/PoolFormer)提出的 MetaFormer 元架构设计,以Pooling Token 混合器 + ConvolutionalGLU(CGLU)MLP构成,将其封装为,用于替换 YOLOv11-seg 的 C3k2 块。对比维度C3k2(基线)C3k2_PoolingFormerCGLU(本文)参数量(n scale)2.46M≈2.49M9.6≈9.69.7(+1.0%)架构范式单阶段卷积MetaFormer 双阶段。

qq_44224801的博客 843

tire树

tire树是用来存储字符串的一个工具,举个形象点的例子,相信大家都用过英语词典,假如我们要查单词abandoned,我们肯定会先在字典中找a,接着在a的那一部分后面找b,就这样依次找下去,tire树就是这样的一种结构,假如我们要存apple,bomb,cat,yes,coach这几个单词,那么这棵树的结构就是下面这个样子: tire树不仅可以用来存储字符串,还可以存数,直接把数换成二进制01串即可储存,下面给出一道例题,大家结合代码好好理解一下吧 维护一个字符串集合,支持两种操作: I x向集合.

AC__dream的博客 971

​​10.3 时间敏感网络(TSN)协议适配​

本文探讨了时间敏感网络(TSN)协议在PCIe网络加速卡开发中的适配方案,重点分析了时间同步、流量调度和冗余传输三大核心问题。研究从协议实现、硬件加速设计和驱动优化三个维度展开,提出采用FPGA实现PTP时钟同步、动态TAS调度器以及双路径冗余传输等技术方案。通过工业控制网络案例验证,该方案将端到端延迟从120μs降至8μs,带宽利用率提升至92%,同时实现了100%的确定性保障。研究还总结了调试工具和典型问题解决方法,为TSN在PCIe网络中的实际应用提供了技术参考。

amy_mhd的博客 364

最大异或和(tire树)

核心思想是使用字典树(Trie)来求解数组中两个数之间的最大异或值

2303_79603826的博客 817

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

HDU 1251 统计难题(Tire tree)

<br />题目:<br />      给一个单词字典A={str[0], str[1], ...},再给定一系列的单词B = {s[0], s[1], s[2], ...}, 求字典A中以s[i]为前缀的单词有多少。<br />解法:<br />      Tire tree, 先建字典数,然后再查询每个给定的单词。<br />AC代码如下:<br />/* Author; ACb0y Date: 2010年12月4日20:21:57 ProblenID: HDU 1251 统计难题 T

个人独立博客http://www.acb0y.cn/ 2066

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

tire字符统计(字典树)

共有 N 个操作,所有输入的字符串总长度不超过 105,字符串仅包含小写英文字母。,都要输出一个整数作为结果,表示 x 在集合中出现的次数。接下来 N 行,每行包含一个操作指令,指令为。第一行包含整数 N,表示操作数。

q619718的博客 171

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Tire-Tree(前缀树,字典树)

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

yzf0011的专栏 4489

海量数据处理之Tire树(字典树)

参考博文:http://blog.youkuaiyun.com/v_july_v/article/details/6897097 第一部分、Trie树 1.1、什么是Trie树     Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较

田原的学习笔记 3万+

字典树 Tri树

以下是固定存储字符的字典树。  可以以空间换时间,变为可变长的字典树,不过这样的话,查找就会费时了。 #pragma comment(linker, "/STACK:10240000,10240000") #include #include #include #define node_size 70 #define maxlen 100 const char trie_b

8rfuz的博客 804

tir树学习洛谷P2580

#mermaid-svg-oCaRty5zVktVUekk .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-oCaRty5zVktVUekk .label text{fill:#333}#mermaid-svg-oCaRty5zVktVUekk .node rect,#mermaid-svg-oCaRty5zVk

ssw的博客 300

tries树(字典树)

链接https://mp.weixin.qq.com/s/ZYtU4v9y2KMLT0d2X_MIZQ

qq_40388699的博客 256

Tire树

今天写一个项目,遇到敏感词过滤问题。上面提到了先把敏感词存起来,在这里用到了Tire树来存储。  又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 三个性质:

冰雪的专栏 454

Tire树的基本应用

上一篇主要讲了Tire的基本操作与实现方法,接下来开始了解字典树的具体应用。 1.phone list(判断一个字符串是不是另一个字符串的前缀) 原题链接:http://poj.org/problem?id=3630 Description Given a list of phone numbers, determine if it is consistent in the sense t...

张八斤的博客 1490

Python学习之TIR新闻获取

Python学习之requests每周练习 Today I Read(TIR)社区驱动的高质量聚合阅读列表,一个由人工筛选,聚合多新闻来源,专注提供及时的高质量的科技,开源,编程的 “中文” Hacker News。 Github链接(来源):https://github.com/jwenjian/reading-list #! python # _*_ coding=UTF-8 _*_ """ Today I Read(TIR)社区驱动的高质量聚合阅读列表,一个由人工筛选,聚合多新闻来源,专注提供及时的高

m0_55593211的博客 351

字符串算法:Trie树(前缀树)、后缀树

Trie树Trie树,又称字典树、前缀树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。 典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。 Trie树也有它的缺点,

jinzhao1993的博客 1万+

蛮力法求最大字段和时间复杂度_C#实现前向最大匹、字典树(分词、检索)

(给DotNet加星标,提升.Net技能)转自:Spring2Suncnblogs.com/SunSpring/p/12891504.html场景:现在有一个错词库,维护的是错词和正确词对应关系。比如:错词"我门"对应的正确词"我们"。然后在用户输入的文字进行错词校验,需要判断输入的文字是否有错词,并找出错词以便提醒用户,并且可以显示出正确词以便用户确认,如果是错词就进行替换。首先想到的...

weixin_39843338的博客 302
上一篇: Linux面试及基础知识
下一篇: 二叉树最大路径和
0802小乌龟
博客等级 码龄17年 2粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值