在二叉搜索树中存储密钥

时间:2016-07-30 06:42:14

标签: algorithm tree trie

A resource我正在阅读以下内容

  

如果我们将密钥存储在二叉搜索树中,则平衡良好的BST将需要与M * log N成比例的时间,其中M是最大字符串长度,N是树中密钥的数量。

我的问题是,上面的时间复杂度是M * log N,用于在trie中插入一个密钥,或者将N个密钥插入到trie中,还是用于在trie中搜索?另外,当你说Binary时,我们如何决定左右两边的内容。它是左边a-m的字符,右边是n-z,是树的第一层,依此类推?

2 个答案:

答案 0 :(得分:0)

文章说,对于长度为M的字符串,trie优于二叉树,因为它需要O(M)时间,而对于二叉树,它需要O(M logN)时间。

Trie有多个孩子而不只是两个。

class trienode:
    char Character
    map<char, trienode> Children

class trie:
    trienode root

下面是一个包含三个单词amasatok的单词。 a有3个孩子,o有1个孩子。

  (root)
   ' '
   / \
  |   |
  a   o
 /|\   \
| | |   |
m s t   k

答案 1 :(得分:0)

时间复杂度 m * logn 是指您使用平衡BST代替使用trie来查找 n 给定键中的模式。

原因如下:
您将构建类似于对数字数组执行操作的BST。我们不考虑这个预处理步骤 一旦你构建了一个平衡的BST,当你搜索给定的模式时,最坏的情况是模式不存在于BST中或存在于叶节点。这里的关键点是,与具有数字的BST不同,您在任何节点的比较复杂度不是 O(1),而是 O(m)(因为在最坏的情况下,任何节点上的字符串都不同于最后一个字母的模式。) 在最糟糕的情况下,您必须将您的模式与 O(logn)节点进行比较。

因此,最坏情况下的复杂性是 O(m * logn)