虽然很难找到"基数树"的一致定义,但大多数接受的基数树定义表明它是一个压缩的前缀树。我很难理解的是"基数"这个词在这种情况下的意义。为什么压缩前缀树如此命名(即基数树)而非压缩前缀树不称为基数树?
维基百科可以回答这个问题,https://en.wikipedia.org/wiki/Radix:
在数学数制中,基数或底数是数唯一的数字,包括0,用于表示a中的数字位置数字系统。例如,对于十进制(今天使用的最常用的系统)的基数是10,因为它使用从0到9的十位数字
和树https://en.wikipedia.org/wiki/Radix_tree:
是一个数据结构,表示一个空间优化的trie,其中每个作为唯一子节点的节点与其父节点合并。结果是每个内部节点的子节点数至少是基数树的基数r,其中r是正整数,是x的幂2, x≥1
最后查字典:
1.基数(名词)
一个原始词,由它衍生出其他词
基数树中的基数决定了树的子节点数量(或深度)与"稀疏度"之间的平衡,或者有多少个后缀是唯一的。
编辑-细化
每个内部节点的子节点数至少为基数r
让我们考虑"aba,abnormal,acne和abyss"这几个词。在常规的前缀树(或trie)中,每条弧向单词添加一个字母,所以我们有:
-a-b-a-
n-o-r-m-a-l-
y-s-m-a-l-
-c-n-e-
我的画有点误导-在尝试中字母通常位于弧上,所以'-'是一个节点,字母是边。注意许多内部节点有一个子!现在是紧凑的(明显的)形式:
-a-b -a-
normal-
ysmal-
cne-
现在我们有一个内部节点(在b后面),有3个子节点!基数是2的正幂,所以这里是2。为什么是2而不是3?首先注意根结点有两个子结点。另外,假设我们想添加一个单词。选择:
- 共享
b
前缀-好吧,4大于2。 - 与
b
的孩子共享一个边缘-说"异常"。插入的工作方式是,共享部分将被分割,我们将有:
相关部门:
-normal-ly-
-
normal现在是一个内部节点,但是有2个子节点(一个叶子节点)。另一个例子是去除粉刺。但是现在紧凑性属性说b
之后的节点必须被合并回来,因为它是唯一的子节点,所以树变成了
-ab-a
-normal-ly-
-
-ysmal
所以,我们仍然维持children>2。
希望这澄清!