字典树 (Trie)

用于存储字符串。树的每条边恰好表示一个字符,每个节点代表从根到该节点的路径所对应的字符串。

简介与操作实现可见蓝书P82~83。

  Trie字典树很好地利用了前缀,节省了很多空间。

 //先说明一下:本代码段的字符串d的下标都是从1开始
inline void insert(char *d)//向Trie树插入字符串d
{
int l=strlen(d+),now=,num;
for(int i=;i<=l;++i)
{
num=d[i]-'a';//字符化为数字下标
if(!tree[now][num])//当前节点不存在该字母的边,即该字母还未在当前节点插入过
tree[now][num]=++cnt;
now=tree[now][num];
}
ed[now]=;//最后标明一下字符串结尾节点,说明该节点代表了一个已插入过的字符串
} inline int fin(char *d)从Trie树查询字符串d
{
int l=strlen(d+),now=,num;
for(int i=;i<=l;++i)
{
num=d[i];
if(!tree[now][num])//不存在对应节点了,说明Trie中没有这个串
return ;
now=tree[now][num];
}
return ed[now];//查询到最后还要看当前节点是否代表一个插入过Tire树的字符串
}

操作实现的核心代码

应用:

1、前缀查找。

  在Trie树中查找一个字符串的前缀。不管Trie树中插入了多少个字符串,查找的复杂度都是优秀的O(n)(n为当前字符串的长度)。

  还有一种边插边找前缀的方法。如果当前串插入Trie树时没有新建任何节点,那它就是它的末尾节点的子树中所有串的前缀;如果当前串插入Trie树时经过了某个串x的末尾节点,那么x就是当前串的一个前缀。

2、异或相关。

  将每个数看做二进制的01串。从Trie树中找当前数字异或值最大的数,只要尽可能向与当前边反方向的边走就好。

 inline int fin(int a)//从Trie树中找与a异或的结果最大的数,并返回这个结果
//a为int范围的一个正整数
{
int ret=,c,now=;//这里的Trie数根节点的编号为1
for(int k=;k>=;--k)
{
if((a&(<<k))^(<<k))//看下a当前位取反的结果
c=;
else
c=;
if(tree[now][c])//当前点能有a当前位代表边的另一侧方向的边的话,就走那条边
{
now=tree[now][c];
ret|=<<k;//维护答案(当前走的与a的当前位不一样的话,答案的当前位就是1,因为是异或)
}
else//没有的话,有哪条边,就走那条边喽。
//Trie树中至少有一个数的话,一定能一直走下去
now=tree[now][c^];
}
return ret;
}

相关代码

Trie树(字典树)整理的更多相关文章

  1. Trie(字典树)

    没时间整理了,老吕又讲课了@ @ 概念 Trie即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种,典型应用是统计和排序大量的字符串(不限于字符串) Trie字典树主要用于存储字符串, ...

  2. 剑指Offer——Trie树(字典树)

    剑指Offer--Trie树(字典树) Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种的单词.对于每一个单词,我们要判断他出没出现过,如果出现了,求第一次出现在第几个位 ...

  3. AC自动机——1 Trie树(字典树)介绍

    AC自动机——1 Trie树(字典树)介绍 2013年10月15日 23:56:45 阅读数:2375 之前,我们介绍了Kmp算法,其实,他就是一种单模式匹配.当要检查一篇文章中是否有某些敏感词,这其 ...

  4. 9-11-Trie树/字典树/前缀树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版

    课本源码部分 第9章  查找 - Trie树/字典树/前缀树(键树) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚 ...

  5. [LintCode] Implement Trie 实现字典树

    Implement a trie with insert, search, and startsWith methods. Have you met this question in a real i ...

  6. Trie树|字典树(字符串排序)

    有时,我们会碰到对字符串的排序,若采用一些经典的排序算法,则时间复杂度一般为O(n*lgn),但若采用Trie树,则时间复杂度仅为O(n). Trie树又名字典树,从字面意思即可理解,这种树的结构像英 ...

  7. Trie - leetcode [字典树/前缀树]

    208. Implement Trie (Prefix Tree) 字母的字典树每个节点要定义一个大小为26的子节点指针数组,然后用一个标志符用来记录到当前位置为止是否为一个词,初始化的时候讲26个子 ...

  8. Trie树/字典树题目(2017今日头条笔试题:异或)

    /* 本程序说明: [编程题] 异或 时间限制:1秒 空间限制:32768K 给定整数m以及n个数字A1,A2,..An,将数列A中所有元素两两异或,共能得到n(n-1)/2个结果,请求出这些结果中大 ...

  9. Trie树(字典树)的介绍及Java实现

    简介 Trie树,又称为前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串.与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定.一个节点的所有子孙都有相同的前缀,也 ...

  10. Trie树 - 字典树

    1.1.什么是Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是最大限 ...

随机推荐

  1. Map以及HashMap

    本文主要介绍java集合框架的Map集合,在日常生活中Map的运用也十分广泛. 与List集合.Set集合隶属于Collection不同,Map是一个独立的接口,与Collection相同级别的接口. ...

  2. servlet_cdi自动注入

    @WebServlet("/cdiservlet")//url映射,即@WebServlet告诉容器,如果请求的URL是"/cdiservlet",则由NewS ...

  3. NIKKEI Programming Contest 2019-2 Task E. Non-triangular Triplets

    $\require{enclose}$ 必要条件 一方面 $\sum_{i=1}^{N}(a_i + b_i) \le \sum_{i=1}^{N} c_i \implies 2\sum_{i=1}^ ...

  4. 前端-CSS-初探-注释-语法结构-引入方式-选择器-选择器优先级-01(待完善)

    目录 CSS(Cascading Style Sheet) CSS注释 CSS语法结构 CSS的三种引入方式 选择器 伪类.伪元素选择器速查 CSS选择器优先级***** 选择器相同的情况下 选择器不 ...

  5. 分布式的几件小事(十一)分布式session如何实现

    1.分布式会话是什么? 首先,我们知道浏览器有个cookie,在一段时间内这个cookie都存在,然后每次发请求过来都带上一个特殊的jsessionid cookie,就根据这个东西,在服务端可以维护 ...

  6. Nginx的快速安装

    1. 准备工作 1. CenterOS7.x.vmware虚拟机,安装过程参考 https://jingyan.baidu.com/article/eae0782787b4c01fec548535.h ...

  7. Java程序员常用的Linux命令01——linux命令基础

    1.显示日期的命令date 显示日期: [root@localhost ~]# date 显示年月日: [root@localhost ~]# date '+%Y%m%d' 2.显示日历指令cal 显 ...

  8. 2019-2020-1 20199319《Linux内核原理与分析》第九周作业

    进程的切换和系统的一般执行过程 进程调度的时机 1.中断:起到切出进程指令流的作用.中断处理程序是与进程无关的内核指令流.中断类型: 硬中断:可屏蔽中断和不可屏蔽中断.高电平说明有中断请求. 软中断/ ...

  9. 2019.10.9wechat反弹shell复现

    ./backdoor.py -f libEGL.dll -s reverse_shell_tcp_inline -P 6666 -H 192.168.106.137 msfconsle 打开msf 在 ...

  10. lightinthebox头部分类菜单下拉导航,使鼠标移到See All Categories就显示下拉菜单

    lightinthebox头部分类菜单下拉导航,使鼠标移到See All Categories就显示下拉菜单 打开includes\templates\lightinthebox\common\tpl ...