Trie

✍ dations ◷ 2025-11-10 03:29:18 #数据结构

在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。

Trie这个术语来自于retrieval。根据词源学,trie的发明者Edward Fredkin把它读作/ˈtriː/ "tree"。但是,其他作者把它读作/ˈtraɪ/ "try"。

在图示中,键标注在节点中,值标注在节点之下。每一个完整的英文单词对应一个特定的整数。Trie可以看作是一个确定有限状态自动机,尽管边上的符号一般是隐含在分支的顺序中的。

键不需要被显式地保存在节点中。图示中标注出完整的单词,只是为了演示trie的原理。

trie中的键通常是字符串,但也可以是其它的结构。trie的算法可以很容易地修改为处理其它结构的有序序列,比如一串数字或者形状的排列。比如,bitwise trie中的键是一串比特,可以用于表示整数或者内存地址。

trie树常用于搜索提示。如当输入一个网址,可以自动搜索出可能的选择。当没有完全匹配的搜索结果,可以返回前缀最相似的可能。

trie树实际上是一个确定有限状态自动机(DFA),通常用转移矩阵表示。行表示状态,列表示输入字符,(行,列)位置表示转移状态。这种方式的查询效率很高,但由于稀疏的现象严重,空间利用效率很低。也可以采用压缩的存储方式即链表来表示状态转移,但由于要线性查询,会造成效率低下。

于是人们提出了下面两种结构。

三数组Trie(Triple-Array Trie)结构包括三个数组:base,next和check.

二数组Trie(Double-Array Trie)包含base和check两个数组。base数组的每个元素表示一个Trie节点,即一个状态;check数组表示某个状态的前驱状态。

这是一个用于词频统计的程序范例,因使用了getline(3),所以需要glibc才能链接成功,没有glibc的话可以自行改写。

相关

  • 第四心音在心脏生理学中,第四心音(英语:Fourth heart sound,S4)又称心房音,是一种心音,一种少见的额外心音,发生于主要心音"lub-dub"心音(第一心音与第二心音)之前的的短暂瞬间,即心房收缩之后
  • 田纳西田纳西州(英语:State of Tennessee),位于美国南方,首府为纳许维尔,是美国音乐圣地,也是美国乡村音乐的中心。其他著名城市还有孟菲斯。美国2012年人口估算显示,田纳西州共有人口645.
  • 鸟松区鸟松区(台湾话:.mw-parser-output .sans-serif{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Lato,"Helvetica Neue",Helvetica,Arial,sans-serif} Tsiá
  • 哈布斯堡帝国哈布斯堡君主国(德语:Habsburgermonarchie,英语:Habsburg Monarchy),或哈布斯堡帝国(Habsburg Empire),是由历史学家采用的,用来形容一系列曾经由哈布斯堡家族(House of Habsburg)的系统
  • 锎化合物锎化合物是锎元素形成的化合物,只有很少一些有所研究。三氯化锎是最先发现的锎化合物,由伯里斯·坎宁安于1960年在劳伦斯伯克利国家实验室制备出来。唯一能在水溶液稳定的离子
  • 唐努乌拉山脉唐努乌拉山脉(俄语:Танну-Ола;图瓦语:Таңды-Уула)是俄罗斯的山脉,位于与蒙古国接壤的边境,由图瓦共和国负责管辖,属于南西伯利亚山脉的一部分,最高点海拔高度2,930
  • 伦敦市法团伦敦市法团(英语:City of London Corporation),亦称伦敦法团,是英国伦敦的市中心区——伦敦市的自治组织和地方政府。伦敦市法团的辖区只涵盖伦敦市中心的老城区,伦敦城(也叫作“伦
  • 福阿德·阿贾米福阿德·A·阿贾米(Fouad A. Ajami,阿拉伯语:فؤاد عجمي‎,1945年9月18日-2014年6月22日),是一位黎巴嫩裔-美国教授、作家。他是斯坦福大学胡佛研究所的高级教授。他也是伊
  • AAA 6th Anniversary Tour 2011.9.28 at Zepp Tokyo“AAA 6th Anniversary Tour”是日本的音乐团体AAA于2012年2月22日推出的DVD,由avex trax发行。
  • 拉脱维亚苏维埃社会主义共和国国旗拉脱维亚苏维埃社会主义共和国国旗(俄语:Флаг Латвийской ССР、拉脱维亚语:Latvijas PSR karogs)是苏联加盟共和国拉脱维亚苏维埃社会主义共和国使用的国旗。