首页 > 其他分享 >字典树

字典树

时间:2024-04-02 12:55:45浏览次数:17  
标签:hash 一个 text 某个 字符串 字典

有时候我们要维护一个字符串集合,然后支持插入、删除、查询某个字符串出现次数和查询某个字符串作为前缀的出现次数。

显然的,暴力肯定 T 飞。

hash:我来!(非常好数据,使我的 hash WA)

所以我们需要字典树。

字典树有三大两大优点:

  • 速度快

  • 无失误(hash 有一定概率会冲突)

  • 支持多模式串匹配

但是,字典树的内存特别庞大,所以数据规模庞大的时候还是乖乖用 hash 吧。

不过,字典树似乎不支持快速判断区间回文串(hash + 树状数组可以 \(O(\log N)\) 完成)。

字典树的结构

下图是一个由 \(\{ \text{a}, \text{asf}, \text{e}, \text{eryt}, \text{radix}, \text{sda} \}\) 构成的 Trie:

11.bmp

(使用 usfca 制作,具体链接可以在 OI-wiki 找到)

可以看到,字典树是一个有向树。

理解(初学者不建议打开) 至于为什么,首先需要理解自动机的概念。

自动机用于判断一组信号序列是否合法(很像图灵机是不是)。

以下是一个判断某个数是否是偶数(以二进制输入)的自动机:

12.bmp

而 Trie 树,就是在给定一个字符串后,如果这个字符串是字符串集合的一个串,那么就接受(上面的“查询某个字符串出现次数和查询某个字符串作为前缀的出现次数”需要两个 Trie,但是可以压成一个)

字典树的操作

插入

很简单,遇到不存在的节点创造一个。

记得维护信息。

删除

遇到一个再也不用的节点就删掉。

记得维护信息。

查找某个字符串

一个一个字符的跳。

查找某个前缀

一样一个一个字符的跳,跳完后返回子树和。

标签:hash,一个,text,某个,字符串,字典
From: https://www.cnblogs.com/hhc0001deljbk/p/18110341

相关文章

  • 【python】字典(Dictionary)与集合(Set)
    字典是一种键值对的数据结构,而集合是一种无序、元素不重复的数据结构。目录前言正文一、字典(dict)    1、字典的定义    注意:        2、字典的查询    2.1语法:字典名['键名']    2.2语法:字典名.get('键名')   ......
  • 字典树基础(Java实现)
    字典树也叫Trie,是一种树形结构,其中每个节点可以存储一些变量表示该字符串出现的数量。每条边表示一个字符,如节点9存储一个变量cnt,说明存在三个字符串为“cbc” 例题:前缀判定importjava.math.BigInteger;importjava.util.*;publicclassMain{staticclass......
  • 排列的字典序问题(Java)
    问题描述:n个元素{1,2,…,n}有n!个不同的排列。将这n!个排列按字典序排列,并编号为0,1,…,n!-1.每个排列的编号为其字典序值。例如,当n=3时,6个不同排列的字典序值如下:字典序值排列   0    1    2    3    4    5       ......
  • 字典案例
    #案例1:#假设,已知小明、小红、小亮三人的语文、数学、英语三科成绩,将姓名、学科、成绩做对应,并计算谁的总分最高  #案例2:#假设,已知小明、小红、小亮三人的语文、数学、英语三科成绩,将姓名、学科、成绩做对应,并计算谁的总分最高  ......
  • python基础(四)----列表、字典练习题
    好友管理系统请设计一个好友管理系统,每个功能都对应一个序号,用户可根据提示“请输入您的选项”选择序号执行相应的操作,包括:(1)添加好友:用户根据提示“请输入要添加的好友:”输入要添加好友的姓名,添加后会提示“好友添加成功”。(2)删除好友:用户根据提示“请输入删除好友姓名:”输入要删......
  • Python列表、字典、元组练习题
    一、将下列姓名长度小于2字符的删除,将写法不同但名字一样的名字合并,并按首字母大写形式输出。names=[‘Bob’,‘JOHN’,‘alice’,‘bob’,‘ALICE’,‘J’,‘Bob’]答案:names=['Bob','JOHN','alice','bob','ALICE','J','Bob']ans={name.title()for......
  • (自学#Python)Day08-字典的定义及基本操作
    (自学Python)Day08-字典的定义及基本操作一、字典的定义及创建"""字典dict定义:由一系列键值对组成的可变散列容器。操作:创建添加定位删除遍历"""#1.创建#列表善于存储单一......
  • 谈谈Python中的列表、元组、字典和集合的主要区别和用法
    谈谈Python中的列表、元组、字典和集合的主要区别和用法Python是一种功能强大且易于学习的编程语言,它提供了多种数据结构来支持各种编程需求。其中,列表(list)、元组(tuple)、字典(dictionary)和集合(set)是Python中最常用的数据结构。下面我们将详细讨论这四种数据结构的主要区别和用......
  • YTU 1712 排列的字典序问题
    题目描述n个元素{1,2,……,n}有n!个不同的排列。将这n!个排列按字典序排列,并编号为0,1,…,n!-1。每个排列的编号为其字典序值。例如,当n=3时,6个不同排列的字典序值如下: 给定n以及n个元素{1,2,……,n}的一个排列,计算出这个排列的字典序值,以及按字典序排列的下一个排列。......
  • P8306 【模板】字典树
    原题链接题解1.建议去B站上看看动画演示,你就明白怎么回事了2.如何用代码实现呢?看完你就明白了code#include<bits/stdc++.h>usingnamespacestd;intnum=0;inttree[3000006][75]={0};intcnt[3000006]={0};chars[3000006];intans;intt,n,q;//放全局变量是为了加......