合并两个二叉树
Merge two binary trie
我想合并两个trie结构,但是我能想到的最好的复杂度是
从其他 trie 中获取值列表:O(n),n 是 trie 中的节点数。
插入 list intro target trie 中的所有值:n * O(m),m 是键的长度
考虑到,在最坏的情况下,密钥的大小为 n,合并的复杂度不是 O(n^2) 吗?
有没有更好的方法?
复杂度为 O(N+M)。
您需要两个迭代器(树节点指针)都从各自树的根节点开始。
你看看 children 如果 child 只出现在其中一个迭代器中,那么你只需将 child 复制到结果中(如果你可以移动child 直接(分配指针)更好)。如果双方都存在 child,则在各自的 children.
上递归调用函数
这样一来,您只需花时间合并不明确的节点,就可以一次性 copy/move 整个子树。
如果您 运行 最初的想法复杂度将为 O(N*M),其中 N 是条目数,m 是条目的平均长度。您不会得到 O(N^2),因为如果所有节点都用于单个条目(最坏的情况),您仍然只需要复制该条目一次。
我想合并两个trie结构,但是我能想到的最好的复杂度是
从其他 trie 中获取值列表:O(n),n 是 trie 中的节点数。 插入 list intro target trie 中的所有值:n * O(m),m 是键的长度 考虑到,在最坏的情况下,密钥的大小为 n,合并的复杂度不是 O(n^2) 吗?
有没有更好的方法?
复杂度为 O(N+M)。 您需要两个迭代器(树节点指针)都从各自树的根节点开始。
你看看 children 如果 child 只出现在其中一个迭代器中,那么你只需将 child 复制到结果中(如果你可以移动child 直接(分配指针)更好)。如果双方都存在 child,则在各自的 children.
上递归调用函数这样一来,您只需花时间合并不明确的节点,就可以一次性 copy/move 整个子树。
如果您 运行 最初的想法复杂度将为 O(N*M),其中 N 是条目数,m 是条目的平均长度。您不会得到 O(N^2),因为如果所有节点都用于单个条目(最坏的情况),您仍然只需要复制该条目一次。