在trie / radix树中排序节点的子节点

时间:2014-01-16 03:28:41

标签: data-structures trie radix-tree

当我查找Tries和基数树时,例如 http://en.wikipedia.org/wiki/Compact_prefix_treehttp://en.wikipedia.org/wiki/Trie, 我没有看到关于节点子节点的词典排序的具体内容。

所以,例如在this trie中(页面上唯一的数字) 根的孩子可以从左到右更好地命名为'A','i','t'。

尝试/基数树用于检索 - 不用于频繁更新。因此,这种排序不会花费太多,特别是在罕见的树更新,算法上简单/直接,并在值查找/检索期间增加一些速度。

我错过了什么?

我正在寻找支持/反对的论据。

1 个答案:

答案 0 :(得分:1)

我假设你想订购孩子,这样你就可以更快地搜索它们。我想你会发现,给定节点的子节点数量非常小 - 足够小,二元搜索和顺序搜索之间的差异并不重要。或者甚至可能很小,顺序搜索比二分搜索更快。

例如,按字母顺序排列字母'q'的孩子是没有意义的,因为它的孩子很少。对'q'后面的几个字母进行二进制搜索会比顺序搜索慢。按频率订购儿童更有意义。 '你'将是第一个孩子,并且选择的项目比任何其他项目都要频繁。

我面前没有一个bigram频率表,但我怀疑你会发现在大多数情况下,特定字母的可能儿童数量不符合词典排序,并且频率排序导致更好的表现。可能的例外是在单词的开头,但即便如此,我怀疑按频率排序会更有意义。

您可以构建这样的trie并检查节点。查看典型节点有多少个孩子,看看频率是多少。