基本数据结构①——trie树

RT

trie树是一种用于实现字符串的快速检索的树结构;大该是每个节点都有若干个指向字符的指针;如图:

好像看不清,不过没多大事;

然后trie树支持两个操作:插入,查找;

先放代码

struct data      
        p=trie[p].son[ch];
    }
    trie[p].have=true;
}
int f(char *s)
{
    int len=strlen(s),p=0;
    for(int k=0;k<len;++k)
    {
        int ch=s[k]-‘a‘;
        if(!trie[p].son[ch]) return false;
        p=trie[p].son[ch];
    }
    if(!trie[p].have) return false;//其实写return trie[p].have 就行;
}

然后就可以来到例题https://www.luogu.org/problemnew/show/P2580;

但是这学了trie树还需要一个树上dfs

比如我们可以按字典序记录;

void dfs(int p)
{
    if(trie[p].num) a[trie[p].num]=++t;    //当他是结尾时,标记,a数组存的是字符串编号
    for(int i=0;i<26;++i)
    {
        if(trie[p].son[i]) dfs(trie[p].son[i]);
    }
}

以后再补充;

原文地址:https://www.cnblogs.com/AidenPearce/p/8455946.html

时间: 2024-08-29 22:52:23

基本数据结构①——trie树的相关文章

数据结构~trie树(字典树)

1.概述 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. 我理解字典树是看了这位大佬博客.还不了解字典树的可以先进去学习一下 https://www.cnblogs.com/TheRoadToTheGold/p/6290732.html 还有这个讲了下为什么用字典树,和其他的相比优缺点在哪 https://www.cnblogs.com/Allen-rg/p/7128518.html 现在来个题来更进一

数据结构——trie树(字典树)

又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高. 模板题: 代码 #include<iostream> using namespace std; const int N = 200010; //用来存放子节点,idx是已经使用的结点下标 int son[N][26],idx;

【hdoj】1251 统计难题 【数据结构-Trie树裸题】

传送门:统计难题 题意: 字典树裸题. 分析 字典树板子,但是这题需要注意一点. 关于字典树的只是可以参考hihocoder hiho一下 第二周 用G++提交会爆内存(Memory Limit Exceeded),用c++提交可以AC. G++ 与 C++提交的区别 参考:OJ中的语言选项里G++ 与 C++的区别 C++是一门计算机编程语言,而G++则是C++的编译器. 选择C++意味着你将使用C++最标准的编译方式,也就是ANSI C++编译. 选择G++则意味这你使用GNU项目中适用人群

B树、Trie树详解

查找(二) 散列表 散列表是普通数组概念的推广.由于对普通数组可以直接寻址,使得能在O(1)时间内访问数组中的任意位置.在散列表中,不是直接把关键字作为数组的下标,而是根据关键字计算出相应的下标. 使用散列的查找算法分为两步.第一步是用散列函数将被查找的键转化为数组的一个索引. 我们需要面对两个或多个键都会散列到相同的索引值的情况.因此,第二步就是一个处理碰撞冲突的过程,由两种经典解决碰撞的方法:拉链法和线性探测法. 散列表是算法在时间和空间上作出权衡的经典例子. 如果没有内存限制,我们可以直接

查找(二)简单清晰的B树、Trie树具体解释

查找(二) 散列表 散列表是普通数组概念的推广.因为对普通数组能够直接寻址,使得能在O(1)时间内訪问数组中的任何位置.在散列表中,不是直接把keyword作为数组的下标,而是依据keyword计算出对应的下标. 使用散列的查找算法分为两步.第一步是用散列函数将被查找的键转化为数组的一个索引. 我们须要面对两个或多个键都会散列到同样的索引值的情况.因此,第二步就是一个处理碰撞冲突的过程,由两种经典解决碰撞的方法:拉链法和线性探測法. 散列表是算法在时间和空间上作出权衡的经典样例. 假设没有内存限

poj2513 Colored Sticks (欧拉通路+Trie树+并查集)

D - Colored Sticks Crawling in process... Crawling failed Time Limit:5000MS     Memory Limit:128000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 2513 Appoint description: System Crawler (2016-05-05) Description You are given a bunch

查找(二)简单清晰的B树、Trie树详解

查找(二) 散列表 散列表是普通数组概念的推广.由于对普通数组可以直接寻址,使得能在O(1)时间内访问数组中的任意位置.在散列表中,不是直接把关键字作为数组的下标,而是根据关键字计算出相应的下标. 使用散列的查找算法分为两步.第一步是用散列函数将被查找的键转化为数组的一个索引. 我们需要面对两个或多个键都会散列到相同的索引值的情况.因此,第二步就是一个处理碰撞冲突的过程,由两种经典解决碰撞的方法:拉链法和线性探测法. 散列表是算法在时间和空间上作出权衡的经典例子. 如果没有内存限制,我们可以直接

基于trie树的具有联想功能的文本编辑器

之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chuxiuhong/smarteditor 数据结构,使用过程截图以及源代码如下: #数据结构 **trie树** trie树相应的介绍点击链接[https://en.wikipedia.org/wiki/Trie](https://en.wikipedia.org/wiki/Trie) trie树在p

【数据结构】Trie树

1.Trie树简介 Trie树,又称字典树.前缀树,被用于信息检索(information retrieval)的数据结构.Trie一词便来自于单词retrieval.基本思想:用字符串的公共前缀降低查询时间.比如,在最优的查询二叉树中查询关键字的时间复杂度为M * log N,M是字符串最大长度,N为字符串数量:而用Trie树时,只需O(M)时间. [1] 中给出一个简单Trie树例子,蓝色表示一个单词结尾:该Trie树存储的单词为the, their, there, a, any, answ