Trie

✍ dations ◷ 2025-12-07 06:10:30 #数据结构

在计算机科学中,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的话可以自行改写。

相关

  • PP00-P04 胎儿和新生儿受母体因素及妊娠、产程和分娩并发症的影响P05-P08 与妊娠期长短和胎儿生长有关的疾患P10-P15 产伤P20-P29 特发于围生期的呼吸和心血管疾患P35-P39 特
  • 压力机成型压力机,通常简称压力机或压床,属于加工机械,它能利用压力来改变工件的形状。压力机可以分为以下几类:通常有一个简单的矩形框架,由槽钢(英语:Structural channel)或钢管等制造(英
  • 十诫十诫(希伯来语:.mw-parser-output .script-hebrew,.mw-parser-output .script-Hebr{font-size:1.15em;font-family:"Ezra SIL","Ezra SIL SR","Keter Aram Tsova","Taamey Ash
  • 清朝国歌清朝订定国歌起源于19世纪末、20世纪初。19世纪后期至20世纪初,清朝曾先后使用《普天乐》、《李中堂乐》、《颂龙旗》作为其半官方国歌或代国歌。1911年,清政府将《巩金瓯》定
  • 居昌屠杀事件居昌屠杀事件(韩语:거창 양민학살 사건 居昌良民虐殺事件)是在韩国居昌郡于1951年2月9日至2月11日发生的韩国军队屠杀居昌居民的事件。军队以“扫荡共匪”为由枪杀了700多名非
  • 烟肉食品列表“烟肉”(bacon)演变自古高地德语中的“bacho”(意为臀部、火腿或熏腹部肉),亦近于古法语中的“bacon”。烟肉由猪的腹部肉(俗称五花肉)或背部肉制成,依切法不同而具有不等的脂肪含
  • 三海站三海站(韩语:삼해역)是朝鲜民主主义人民共和国咸镜北道清津市青岩区域三海洞的一个铁路车站,属于平罗线。平罗线
  • 酒诰《酒诰》是《尚书》中的篇章,据称是周公所作,内容是劝人不要酿酒和酗酒。周成王即位之时,周公虑其不懂政务,又鉴于殷商帝王爱好饮酒、荒于政事,因而最终导致亡国,便写此文章劝谏成
  • 大阪桐荫中学校及高等学校大阪桐荫中学校及高等学校(日语:大阪桐蔭中学校・高等学校/おおさかとういんちゅうがっこう・こうとうがっこう  */?)是位于日本大阪府大东市的私立完全中学,由大阪产业大学于1
  • 东皮耶尔 (瓦兹省)东皮耶尔(法语:Dompierre)是法国瓦兹省的一个市镇,属于克莱蒙区(Clermont)迈盖莱蒙蒂尼县(Maignelay-Montigny)。该市镇总面积2.73平方公里,2009年时的人口为236人。东皮耶尔人口变化