合并两个二进制trie

时间:2017-12-18 20:57:05

标签: algorithm tree trie prefix-tree radix-tree

我想合并两个trie结构,但我能想到的最好的复杂性是

从其他trie获取值列表:O(n),n是trie中的节点数。 插入列表介绍目标trie中的所有值:n * O(m),m是键的长度 考虑到,在最坏的情况下,密钥大小为n,是不是合并O(n ^ 2)的复杂性?

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

复杂性将是O(N + M)。 您需要两个迭代器(树节点指针)都从相应树的根节点开始。

如果一个孩子只出现在其中一个迭代器中,那么你看一下孩子们就可以将那个孩子复制到结果中(如果你可以直接移动孩子(指定指针))。如果双方都有孩子,则以相应的孩子递归调用该函数。

这样你只需花时间合并模糊的节点,你就可以一次复制/移动整个子树。

如果您运行原始想法,复杂性将为O(N * M),其中N是条目数,m是条目的平均长度。你不会得到O(N ^ 2),因为如果所有节点都是一个条目(最糟糕的情况),你仍然需要只复制一次该条目。