存储密钥
问题描述:
答
文章说,特里树比二叉树为长度为M的字符串,特里需要O(M)的时间和二叉树它需要O(M logN)的时间更好。
Trie
有多个孩子而不是两个。
class trienode:
char Character
map<char, trienode> Children
class trie:
trienode root
下面是用三个词am
,as
,at
和ok
一个线索。 a
有3个小孩并且o
有1个小孩。
(root)
' '
/\
| |
a o
/|\ \
| | | |
m s t k
答
的时间复杂度米* LOGN是而是采用了特里时,使用的是平衡BST用于查找ň给出键模式的目的。
原因如下:
您将构建BST,与您对数组数组的操作类似。尽管我们没有考虑这个预处理步骤。
一旦你构建一个平衡BST,当你搜索你的给定模式最糟糕的情况是,该模式中不存在BST或在叶节点存在。这里的关键点是,不像数字的BST在任一节点的比较复杂不O(1)而是O(M)(由于您的字符串在任何节点从你的模式不同,在最坏的情况下最后一封信)。
在你有你的格局与O(LOGN)节点比较最坏的情况。
因此,最坏情况下的复杂性是O(m * logn)。
@hlpPy,谢谢。但我的问题是为什么它是二进制搜索树的O(M logN)时间。你可以请编辑你的答案,推理 – saltandwater
@saltandwater,你的问题集中在Trie。但我不知道这个问题的答案。 – hIpPy