摘自:http://blog.sina.com.cn/s/blog_4d3a41f40100f4z7.html
今天AC了两题trie tree的题目,感觉trie的性质真的是相当的好,而且实现比较简单。它使在字符串集合中查找某个字符串的操作的复杂度降到最大只需O(n),其中n为字符串的长度。trie是典型的将时间置换为空间的算法,好在ACM中一般对空间的要求很宽松。
trie的原理是利用字符串集合中字符串的公共前缀来降低时间开销以达到提高效率的目的。
它具有以下性质:1,根结点不包含任何字符信息;2,如果字符的种数为n,则每个结点的出度为n(这样必然会导致浪费很多空间,这也是trie的缺点,我还没有想到好点的办法避免);3,查找,插入复杂度为O(n),n为字符串长度。
举一个例子,给50000个由小写字母构成的长度不超过10的单词,然后问某个公共前缀是否出现过。如果我们直接从字符串集中从头往后搜,看给定的字符串是否为字符串集中某个字符串的前缀,那样复杂度为O(50000^2),这样显然会TLE。又或是我们对于字符串集中的每个字符串,我们用MAP存下它所有的前缀。然后询问时可以直接给出结果。这样复杂度为O(50000*len),最坏情况下len为字符串最长字符串的长度。而且这没有算建立MAP存储的时间,也没有算用MAP查询的时间,实际效率会更低。但如果我们用trie的话,当查询如字符串abcd是否为某字符串的前缀时,显然以 b,c,d....等不是以a开头的字符串就不用查找了。实际查询复杂度只有O(len),建立trie的复杂度为O(50000).这是完全可以接受的。
如给定字符串集合abcd,abd,cdd,efg,hij,hi六个字符串建立的trie tree如下图所示:
trie <wbr>tree <wbr>字典树
查找一个字符串时,我们只需从根结点按字符串中字符出现顺序依次往下走。如果到最后字符串结束时,对应的结点标记为红色,则该字符串存在;否则不存在。
插入时也只需从根结点往下遍历,碰到已存在的字符结点就往下遍历,否则,建立新结点;最后标记最后一个字符的结点为红色即可。
同时我们看到,如果字符的种类为n,则需要结点的个数为n级数。
分享到:
相关推荐
在计算机科学中,字典树(也称为前缀树或TrieTree)是一种高效的数据结构,主要用于存储字符串集合。它能够快速地进行关键词查找、插入和删除操作,尤其适合于处理大量的词汇数据,如在四六级英语考试的高频词汇查询...
**哈希 Trie 树(HashTrie)与字典树(Trie树)详解** 哈希 Trie 树,也称为 HashTrie 或者是哈希化的 Trie 树,是一种结合了哈希表和 Trie 数据结构特点的数据结构。它在 Trie 树的基础上引入了哈希函数,提高了...
在众多的数据结构中,TrieTree(又称前缀树或字典树)是一种高效且具有广泛应用场景的结构。本篇将深入探讨TrieTree的基本概念、构造方法以及在实际中的应用。 一、TrieTree概述 TrieTree是一种基于字符串的查找...
TrieTree,又称字典树或前缀树,它允许快速查找具有相同前缀的字符串,常用于搜索引擎和自动补全功能。下面将详细介绍TrieTree服务的组件构成及其作用。 1. **Dictionary组件**: Dictionary组件是TrieTree服务的...
TrieTree(字典树),又称为前缀树,是一种用于快速查找的数据结构。在垃圾分类应用中,TrieTree可以用来高效地存储和检索垃圾名称,实现对垃圾名称的快速匹配。例如,用户输入“废旧电池”,系统会通过TrieTree迅速...
本资料包"11 TrieTree.zip"专注于一个特定的数据结构——Trie(也称为前缀树或字典树),这是在文本处理、搜索引擎优化以及许多其他领域中广泛应用的一种高效工具。TrieTree是由著名计算机科学家严蔚敏教授在《数据...
【PHP-TrieTree-master.zip】是一个包含PHP实现的字典树(Trie Tree)数据结构的资源包。这个项目由AbelZhou在GitHub上开源,提供了完整的代码库供开发者学习和使用。字典树是一种高效的数据结构,常用于字符串搜索...
C#中的TrieTree,又称字典树,是一种高效的数据结构,尤其在自然语言处理(NLP)和文本搜索领域有着广泛的应用。它的主要功能是存储字符串集合,并允许快速查找和匹配这些字符串。TrieTree的基本思想是通过将字符串...
【标题】"POJ2513-Colored Sticks【TrieTree+MergeSet+EulerPath】"涉及的是一道编程竞赛题目,主要考察参赛者的数据结构与算法应用能力,特别是Trie树(字典树)、并查集(MergeSet)以及欧拉路径(Euler Path)这...
《POJ2525-Text Formalization:深入解析TrieTree》 在计算机科学的世界里,算法和数据结构是解决问题的关键。今天我们要探讨的是一个名为"POJ2525-Text Formalization"的问题,它涉及到一种高效的数据结构——Trie...
`TrieTree` 类是字典树的核心类,负责构建整个字典树结构,并提供插入、搜索等基本操作。 - **属性** - `$root`: 字典树的根节点。 - **构造函数** - 初始化 `$root` 为一个新的 `TrieNode` 实例,设置其 `$flag...
Trie树,也被称为字典树或前缀树,是一种数据结构,主要用于高效地存储和检索字符串集合中的数据。在Trie树中,每个节点代表一个字符串的前缀,从根节点到某个节点的路径上的字符序列构成了该节点对应的字符串。这种...
Trie,也被称为“前缀树”或“字典树”,是一种用于存储字符串的数据结构,它在计算机科学中常被用于高效地执行字符串查找操作。在Objective-C中实现Trie算法,可以帮助开发者快速处理大量字符串数据,例如在搜索...
Trie,又称为前缀树或字典树,是一种用于存储动态集合或关联数组的树形数据结构。它的主要特点是通过键的前缀来组织节点,从而快速进行前缀查询和模糊搜索。在Go语言中实现Trie,可以有效地支持字符串集合的增删查改...
java lru leetcode leetcode Description My leetcode solutions. Statistics language num C++ 308 Python3 46 JavaScript 4 Java ...Tree ...Trie ...Tree ...Trie Tree 字典树 Double Linked List 双向链表
在计算机科学领域,字典树(Trie Tree),也被称为前缀树或关键字树,是一种用于存储字符串集合的高效数据结构。与传统的搜索树相比,字典树能够通过共享公共前缀来节省空间,特别适用于处理大量词汇的查找、插入和...
字典树,也称为Trie,是一种特殊的树形数据结构,主要用于快速查找和统计具有公共前缀的字符串。这种数据结构在处理大量字符串时特别有用,例如在搜索引擎的文本词频统计、搜索建议和拼写检查等场景中。Trie的主要...
Trie是一种字典树,用于存储文本字符,并利用了单词之间共享前缀的特点,所以叫做前缀树。不像平衡BST,Trie的高度只与最长的文本串的长度s有关系,而与单词的数量n无关。该代码为C#版本。
TrieTree服务是一种用于语言处理的技术,它通过一种特别的数据结构——前缀树(或称为字典树)来高效地存储和检索字符串数据。TrieTree服务的组成可以分解为多个关键组件,每个组件都有其特定的作用。本文将详细介绍...
### 字典树(Trie Tree)相关知识点 #### 一、什么是字典树? 字典树,也称为前缀树或Trie树,是一种用于存储字符串的高效数据结构。它利用了字符串之间的公共前缀来减少存储空间的需求,并且能够快速进行插入、...