Trie

✍ dations ◷ 2025-05-19 16:43:08 #数据结构

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

相关

  • 异构化异构化反应也称异构化,指某种化学物质在特定条件下改变自身的组成结构,从而成为新物质的反应。产物通常是反应物的异构体。许多异构体的键能相差不大,因此在常温下可相互转化。
  • AFI百年百大女明星1998年,美国电影学会从500名20世纪美国电影界的电影明星中,评选出50名最伟大明星(必须在1950年前已出道,男女各25名),作为美国电影学会的“百年百大”系列的一个重要部分——“AFI
  • 瞿式耜画像出自1920年上海《常熟瞿氏忠贤遗像》瞿式耜(耜,音sì/ㄙˋ,1590年-1651年1月8日),字起田,又字伯略,号稼轩,明末政治人物、诗人。直隶常熟县(今江苏省常熟市)人。祖父瞿景淳,官至礼部
  • 同音字同音词(Homonym)是指语言中读音相同,但是意义不同的词汇。汉语中,由于习惯上用一个汉字记录一个单音节语素,因此,汉语中除同音词外,还有同音字的概念,也就是读音相同,但是意义不同的
  • 华府公立学校华府公立学校(District of Columbia Public Schools, DCPS)是华盛顿哥伦比亚特区的学区。DCPS有45,000名学生和4,000名老师。 DCPS有66个小学,13个初中,18个高中,19个学区(educat
  • 美国陆军第3步兵师一次大战二次大战韩战第3步兵师成立于1917年11月12日。是美国陆军的主力部队之一。美国陆军第3机械化步兵师目前隶属于第18空降军,该师拥有快速机动能力、强大的火力与突击力
  • 辣,在台湾话、潮汕话中叫做莶(hiam)。辣是化学物质(譬如辣椒素、姜酮、姜醇等)刺激细胞,在大脑中形成了类似于灼烧的微量刺激的感觉,不是由味蕾所感受到的味觉,而是一种痛觉。所以其
  • 白岛 (菲律宾)白岛(英语:White Island,他加禄语:Puting Pulo)是一座沙洲,位于菲律宾卡米金省曼巴豪外海。该岛长约1.4公里,形状约略似马蹄,岛上并无树木。该岛每年约有千名观光客到访,游客多数搭乘
  • 厄拉多塞陨石坑厄拉多塞月坑(拉丁文“Eratosthenes”)是一座位于风暴洋东部暑湾中的撞击坑,直径59公里,深约3.4公里。它是一座相对年轻、保存完好的陨石坑,虽然已没有了明亮的辐射纹。月球地
  • 库茨敦库茨敦(英语:Kutztown)是宾夕法尼亚州的一个自治市镇,在阿伦敦西南29公里、雷丁东北27公里。整个市境被伯克县的马克萨唐尼镇所环绕。2010年人口普查时有5012人口。其中95.8%为