首页 > 其他分享 >字典树知识梳理

字典树知识梳理

时间:2023-07-24 15:36:41浏览次数:52  
标签:结点 插入 int 知识 ++ nex 梳理 字典

字典树

目录

字典树的介绍

字典树又名前缀树,是一种用树形结构实现的数据结构,可以高效地存储和检索集合中的数据
优点:
利用数据的公共前缀来减少查询时间,最大限度地减少无谓的比较
缺点:
字典树的核心思想是以空间换时间(有的时候可能会爆哦),数组要开a[最大能储存的结点数目][字符集大小(如26个小写字母就要开26)]
主要操作有插入和询问

字典树的性质

1.根节点不包含数据,除根节点以外的每个节点包含且只包含一个数据
2.数据是以边权的形式储存的

字典树的储存

看来上面的图,想必就会有读者问,1,2,6,11这几个结点中我是该取,a,ab,aba还是ba这类似的问题
俗话说办法总比困难多
于是某位大佬就相处在每个单词的结尾处做标记这个办法

这样我们就知道树里面存的是aa,aba,ba,caa,caaa,cab,cba,cc,而不是其它的

实现

我们多用一个数组来记录每个单词的终结点

代码

插入
void insert(char *s, int l) {  // 插入字符串
	int p = 0;
	for (int i = 0; i < l; i ++) {
		int c = s[i] - 'a';
		if (!nex[p][c]) nex[p][c] = ++ cnt;  // 如果没有,就添加结点
		p = nex[p][c];
	}
	exist[p] = 1;//记录终结点
}
询问
bool find(char *s, int l) {  // 询问字符串
	int p = 0;
	for (int i = 0; i < l; i++) {
		int c = s[i] - 'a';
		if (!nex[p][c]) return 0;
		p = nex[p][c];
	}
	return exist[p];//返回终结点
}

学到这里我们来看一下前缀统计
没看懂的朋友看这里

完结撒花

欢迎大家留言

标签:结点,插入,int,知识,++,nex,梳理,字典
From: https://www.cnblogs.com/L-1115/p/17574349.html

相关文章

  • 爬虫 | Python爬虫应该学习什么知识点?
    什么是爬虫如果说把互联网比喻成蜘蛛网,那么爬虫就是在这张网上的蜘蛛,它可以在上面爬来爬去。在互联网中,爬虫就是机器人,你应该对百度和Google很熟悉吧,为什么我们可以很快的从它们的搜索引擎中获取到资料呢?原因就是它们都有自己的爬虫,在整个互联网上,24小时不间断的爬取那些愿意......
  • C#中的重写与多态知识点整理(刘铁锰老师课堂笔记)
    在C#中,重写(Override)和多态(Polymorphism)是面向对象编程中的重要概念。通过重写和多态,我们可以更好地组织和管理代码,提高代码的可维护性和可扩展性。重写(Override)重写是指在派生类中重新实现基类中已经定义的方法。通过重写一个方法,我们可以为派生类中的该方法提供新的实现,同时让......
  • 济南 S NOIP 刷题实战梳理营游记
    前言期末砸力。这次暑假去两个营,一个在烟台,一个在青岛。在烟台的都是学算法,扔到目录里了,这篇文章就是来讲济南营的。一共十二天,每天上午八点到十二点打比赛,然后吃饭,然后讲题。Day-1\(6h\)的大巴,绷不住了,中途在潍坊西休息,热死了。到了济南,住在酒店旁边,楼下全是吃的,很赞。......
  • javaScript 小知识
    ??运算符只有前面的值是undefined才会执行letstatus=undefined;lettext=status??"暂无"console.log(text)//暂无?.运算符这在有时候处理对象时非常有用,看下面案例,person.name返回undefined然后在调用toString这时肯定会报错,这时使用?.运算符就不会产生错误,?.......
  • 字典序相关字符串问题的 SAM 解法
    前文(SAM基础)如果你并不是很熟SAM,可以看看我远古时期的blog:浅析后缀自动机--Wallace--博客园(cnblogs.com)缘起为什么突然想到这个方面的东西,是因为在ZJU校队预组队时做到一个CF-GYM-100418C,当时一眼SA但实际上根本不熟。赛后发现有位国外老哥随手SAM暴打,一点都......
  • JavaScript复习知识点
    原型在JavaScript中,每个对象都有一个原型(prototype)。原型是一个对象,其他对象可以通过它来继承属性和方法。简单来说,对象通过其原型来共享和访问属性和方法。原型以原型链的形式连接在一起,形成了一个对象和原型之间的关系。当我们访问对象的属性或方法时,JavaScript引擎首先在......
  • 云之道知识付费v2 3.1.1独立版小程序源码+教程
    我已经对源码中的所有引流部分进行了修改,如果还有任何未被删除的部分,请麻烦您留言告诉我!请注意,本源码仅供学习使用,请在下载后的24小时内将其删除。因此,目前我了解的情况是,它不支持通过观看广告来获取资源。如果有大佬在搭建后发现它支持该功能,请务必告诉我操作步骤!我在此向你们表......
  • 公司业务端需要的内部知识库,您的企业还没有吗?
    在当今高速发展的商业环境中,企业面临着日益复杂的挑战。为了更好地应对这些挑战,企业需要建立一个完善的内部知识库。下面将探讨为企业建立内部知识库的重要性,并说明其对企业的益处。企业建立内部知识库的重要性1.提高工作效率内部知识库可以帮助员工快速找到所需的信息,从而提高工......
  • node的一部分知识(还在学习)
    node.js一,node最基础一,为什么要学node.js1.可以让每个人都访问到我们的网页2.为了学习vue二,node是什么一款应该程序,是一个软件,可以运行javascript三,node的作用1.开发服务器端应用2.开发工具类应用3.开发桌面端应用四,node的安装之前安装过二,命令的相关知识一,认识命令......
  • Python【12】 字典的get()方法
    返回指定键的值。参考:https://www.runoob.com/python/att-dictionary-get.html......