本文已使用 Google Cloud Translation API 自动翻译。
某些文档最好以原文阅读。
在计算机科学中,trie 也称为数字树或前缀树,是一种搜索树——一种有序的树数据结构,用于存储动态集或关联数组,其中键通常是字符串。与二叉搜索树不同,树中没有节点存储与该节点关联的键;相反,它在树中的位置定义了与其关联的键。一个节点的所有后代都有一个与该节点关联的字符串的公共前缀,并且根与空字符串关联。值不一定与每个节点相关联。相反,值往往与叶子相关联,并且与一些与感兴趣的键相对应的内部节点相关联。
在所示示例中,键列在节点中,值列在它们下方。每个完整的英语单词都有一个与之关联的任意整数值。当从根向特定键遍历 trie 时,通过连接遍历的边上的字母来检索关联的值。
trie 可以看作是树形的确定性有限自动机。确定性有限自动机由一组状态 Q 和一组输入符号 Σ 构建,其中 Σ 是 trie 的字母表。自动机有一个起始状态 s、一组最终状态 F 和一个将每个状态和输入符号映射到新状态的转换函数。在 trie 中,最终状态的集合通常是所有字符串的集合。
trie 的转换函数定义如下:给定状态 s 和输入符号 a,通过从状态 s 沿标有符号 a 的边下降获得新状态。如果没有标有符号a的边,则新状态为失败状态。在 trie 中,失败状态通常是根。
trie 可以看作是 N 叉树的一个特例,其中每个节点最多有 N 个子节点,其中 N 是字母表中符号的数量。从根到任何叶子的路径描述了与该叶子关联的字符串的前缀。
trie 可以实现为 N 叉树、基数树、数字搜索树、数字树或 Patricia 树。
N 叉树是一棵有根树,其中每个节点的子节点不超过 N 个。字母表中有 N 个符号的特里树可以看作是一棵 N 叉树,其中每个节点至多有 N 个子节点。
在所示示例中,键列在节点中,值在它们下方。每个完整的英语单词都有一个与之关联的任意整数值。当从根向特定键遍历 trie 时,通过连接遍历的边上的字母来检索关联的值。
trie 可以看作是 N 叉树的一个特例,其中每个节点最多有 N 个子节点,其中 N 是字母表中符号的数量。从根到任何叶子的路径描述了与该叶子关联的字符串的前缀。
基数树或压缩树是一种搜索树,其中的键是字符串。通过仅存储连续键之间的差异来压缩树。例如,如果键是单词“Hello”、“World”和“Hell”,则根节点将具有字母“H”和“W”,而根节点的第一个子节点将具有字母“o” ”。根的第二个孩子将有字母“r”和“l”。
在所示示例中,键列在节点中,值在它们下方。每个完整的英语单词都有一个与之关联的任意整数值。当从根向特定键遍历 trie 时,通过连接遍历的边上的字母来检索关联的值。
基数树可以看作是 N 叉树的一个特例,其中每个节点最多有 N 个子节点,其中 N 是字母表中符号的数量。从根到任何叶子的路径描述了与该叶子关联的字符串的前缀。
数字搜索树或数字树是一种搜索树,其中的键是字符串。通过仅存储连续键之间的差异来压缩树。例如,如果键是单词“Hello”、“World”和“Hell”,则根节点将具有字母“H”和“W”,而根节点的第一个子节点将具有字母“o” ”。根的第二个孩子将有字母“r”和“l”。
在所示示例中,键列在节点中,值在它们下方。每个完整的英语单词都有一个与之关联的任意整数值。当从根向特定键遍历 trie 时,通过连接遍历的边上的字母来检索关联的值。
数字树可以看作是 N 叉树的一个特例,其中每个节点最多有 N 个子节点,其中 N 是字母表中符号的数量。从根到任何叶子的路径描述了与该叶子关联的字符串的前缀。
Patricia 树或基数树是一种搜索树,其中的键是字符串。通过仅存储连续键之间的差异来压缩树。例如,如果键是单词“Hello”、“World”和“Hell”,则根节点将具有字母“H”和“W”,而根节点的第一个子节点将具有字母“o” ”。根的第二个孩子将有字母“r”和“l”。
在所示示例中,键列在节点中,值在它们下方。每个完整的英语单词都有一个与之关联的任意整数值。当从根向特定键遍历 trie 时,通过连接遍历的边上的字母来检索关联的值。
Patricia 树可以看作是 N 叉树的一个特例,其中每个节点最多有 N 个子节点,其中 N 是字母表中符号的数量。从根到任何叶子的路径描述了与该叶子关联的字符串的前缀。
尝试用于许多应用程序,例如:
压缩:尝试可用于通过在同一节点中存储具有公共前缀的字符串来压缩字符串。例如,字符串“aaaabbbbccccdddd”可以压缩为“4a4b4c4d”。
拼写更正:尝试可用于存储单词词典,然后用于检查给定单词是否拼写正确。
IP 地址查找:Tries 可用于存储 IP 地址列表,然后用于查找给定主机的 IP 地址。
DNA 序列分析:Tries 可用于存储 DNA 序列,然后用于为给定查询查找匹配的 DNA 序列。