Trie

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

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

相关

  • 植物轮藻、一种杂交蔷薇、百岁兰; 小毛毡苔、蓬蘽、欧洲酸樱桃; 银杏、柳树、溪苔属; 非洲苏铁、蕙兰、一种藓类; 一种蕨、紫菀、朝鲜冷杉。有争议:植物(英文:Plant)是植物界(学名:Plantae
  • 传导性听力损失感觉神经性耳聋是由内耳,前庭耳蜗神经(第VIII号脑神经)或中枢听觉系统的病变造成的耳聋。感觉神经性耳聋分有先天与后天之分。先天性耳聋可由遗传(包括如 Usher 综合征等罕见遗
  • 水杉水杉(学名:Metasequoia glyptostroboides)又名曙杉,落叶乔木,柏科水杉属唯一现存种,中国特产的孑遗珍贵树种,第一批列为中国国家一级保护植物的稀有种类,有植物界“活化石”之称。已
  • 宋微波宋微波(1958年12月-),生于山东省微山县,籍贯江苏睢宁,中国海洋大学教授。宋微波是中国原生动物学家,主要从事纤毛虫及其他原生动物的分类学、系统学和细胞学三方面的研究。2015年获
  • 祝融星祝融星(又称火神星;法语:Vulcain;英语:Vulcan)是一个假设在太阳与水星之间运行的行星,这个19世纪的假设被爱因斯坦的广义相对论排除。祝融星的中文名称来源于中国上古神话人物火神
  • 日本传统艺能日本传统艺能是日本自古代流传下来艺术技能的泛称。自特定阶级的教养、娱乐、仪式、祭嗣等活动的特定形式而来,经系统化的传承而尚未消失的有形、无形之物,如诗歌、音乐、舞蹈
  • 内地核地球的内核,是地球的最深层的部分,半径1220公里。一般相信它以铁-镍之合金组成,以及大概与太阳表面温度相同,约为5700开氏度。内地核的温度与压力可以通过理论与试验方式估计出
  • 开心超人2:启源星之战《开心超人2:启源星之战》(英语:Happy Heroes 2),又名《开心超人大电影2》,是中国动画《开心宝贝》的第二部电影版,由广东明星创意动画公司出品,于2014年7月18日在中国大陆公映。团
  • 莱斯利·瓦利安特莱斯利·瓦利安特(英语:Leslie Gabriel Valiant,1949年3月28日-),英国/美国计算机科学家。2010年图灵奖得主。1949年3月28日出生。曾在英国剑桥大学国王学院、伦敦帝国学院和华威
  • 保尼保尼(Pauni),是印度马哈拉施特拉邦Bhandara县的一个城镇。总人口22583(2001年)。该地2001年总人口22583人,其中男性11487人,女性11096人;0—6岁人口2754人,其中男1389人,女1365人;识字