radix在基数树中的含义是什么?

时间:2014-01-18 13:46:34

标签: data-structures tree trie

我试图理解the radix tree (or compact prefix tree) data structure

我理解查找,插入和删除如何使用它。但我无法理解radix在基数树中的含义。

基数的目的是什么?

3 个答案:

答案 0 :(得分:1)

Wikipedia上有一些信息:

  

结果是每个内部节点最多具有基数trie的基数r的子节点数,其中r是正整数,幂x是2,x≥1。

因此,radix表示每个内部节点的子节点数,并且该数字必须是2的幂。当基数为2时,我们有一个熟悉的二叉树。

答案 1 :(得分:1)

正如Wikipedia etymology link中@ta已经提到的那样,' radix'是你的特里的基础。在这种情况下,我们指的是数字基础,我们将考虑存储二进制数据。基数R = 2 ^ x,其中x> = 1.

以二元(2-ary)trie为例。基数为2,因此在每个节点上您可以比较一位。这两个孩子将处理所有可能的结果:

  • 该位为0
  • 位是1

下一级别的复杂性将是4-ary trie。正如@Garrett上面提到的,基数必须是2的幂,这样它总能处理我们用它的二进制数据的所有可能的排序结果。 4-ary trie可以将两个二进制位与四种可能的结果进行比较:

  • 00
  • 01
  • 10
  • 10

这四个选项分别导致不同的子节点。

现在,回答你关于英文字母的基数的问题。你想要编码从a到z(26个字母)的字母,所以需要有一个至少2 ^ 5 = 32的基数。这是你可以在每个字母之间切换并符合'的最小基数。两个人的权力规则。 2 ^ 4 = 16不会处理所有字母。

例如,让我们想象以下编码:

  • 00000代表' a',
  • 00001表示' b',
  • ...... etc
  • 11001代表' z',
  • 11010至11111尚未使用(尚未)

我们现在可以在树中的每个节点处对五位进行比较,因此每个节点现在可以在任何罗马字母字母之间切换。如果你想要一个处理大写字母的trie,那么你需要一个更大的基数。 2 ^ 6的基数将足以让你做到这一点,但它的代价是在trie中浪费更多的空间(未使用的分支)。

进一步阅读:Sedgewick, Ch 15.4, on Multiway TriesAlgorithms by Cormen的第3版通常非常出色,但对多路尝试没有太大作用。

答案 2 :(得分:1)

我已将此答案发布为对另一个帖子的回复 - What is the difference between trie and radix trie data structures?。特别是 Radix Trie Trie这些可能不是Radix Trie 的部分可能对这个问题特别感兴趣。