Trie

✍ dations ◷ 2025-09-13 17:02:21 #数据结构

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

相关

  • A07A·B·C·D·G·H·QI·J·L·M·N·P·R·S·VATC代码A07(止泻药,肠道抗炎/抗感染药)是解剖学治疗学及化学分类系统的一个药物分组,这是由世界卫生组织药物统计方法整合中心(The
  • 钦纽钦纽(缅甸语:ခင်ညွန်,缅甸语委转写:hkang nywan.,1939年10月11日-),缅甸军政府前领导人物,前缅甸总理及上将,拥有华人血统,于2003年8月被委派出任总理一职,至2004年10月他被迫以
  • 雷州半岛雷州半岛为中国三大半岛之一,其名由来说法颇多,主流观点有两种,一说因多雷暴而得名,另一说因擎雷山、擎雷水而得名。南北140公里长,东西70公里宽,面积7800余平方公里。雷州半岛位
  • 首都医科大学附属复兴医院首都医科大学附属复兴医院是首都医科大学的附属医院,住院部位于北京市西城区复兴门外大街甲20号,门诊部位于北京市西城区月坛北街4号。首都医科大学附属复兴医院的前身是公安
  • 加影加影(马来语:Kajang),是马来西亚雪兰莪州东南部的一个城市也是一个巫金,隶属于加影市议会。其面积为787.61平方公里,人口于2010年为342,657。该市顺时针面向彭亨文冬、森美兰汝来
  • 工作语言工作语言(又称程序语言)是在超国家法律(英语:supranational law)的公司、协会、国家或者其他组织与经济实体中,被赋予独特地位的语言。当一个组织内的成员有许多不同语言背景时,工
  • 中央直辖区中央直辖区(英语:Union territory;或作“联邦属地”、“联邦直辖区”)是印度直属中央政府管辖的一级行政区划单位。在印度,“中央直辖区”和“邦”的主要区别在于“邦”有自己的
  • 北爱尔兰绿党北爱尔兰绿党(Green Party in Northern Ireland)是北爱尔兰的绿党。和世界各地的许多绿党一样,北爱尔兰绿党起源于1970年代末期至1980初期的反核、劳工和和平运动。自2006年开
  • 杰西·泰勒·弗格森杰西·泰勒·弗格森(英语:Jesse Tyler Ferguson,1975年10月22日-)是美国的一位演员。他最著名的作品是在ABC情境喜剧摩登家庭饰演Mitchell Pritchett角色。在此之前他曾在CBS情境
  • 天主教本地治里暨古德洛尔总教区天主教本地治里暨古德洛尔总教区(拉丁语:Archidioecesis Pondicheriensis et Cuddalorensis、泰米尔语:புதுவை கடலூர் உயர் மறைமாவட்டம்),是罗马天主