字典树我理解的应该是构建字典树的时间复杂度为O(N),N为所有字符串的总长度,查询时间复杂度为O(k),k为查询单词的长度。不清楚这个字典树最坏情况复杂度log(n)怎么来的?还麻烦大家点拨。
附原文:
当词典大小为n时,虽然最坏情况下字典树的复杂度依然是O(logn)(假设子节点用对数复杂度的数据结构存储,所有词语都是单字)
其实括号里已经有解释了,从n个字符里找一个,用对数复杂度的数据结构。
何老师打扰您,我刚刚和同学讨论了一下您书中的这个地方,还是不太能理解你这logn怎么出来的,我在网上找资料也没有出现logn这个复杂度的。我读到这里很困惑。
我是这样理解的:
字典树建立好之后,查询一个长度为k的句子是否存在,不就应该是O(k)吗,您文中提到的子节点用对数复杂度的数据结构存储,我理解为就是树(n叉树)。我不太明白您这个log是怎么出来的。按理来说不就是匹配的句子长度为多少就匹配多少次吗,怎么出来log了呢。
我的说法和你的说法并不矛盾,既然n定义为词典大小,我指的是单次状态转移的复杂度为log n。相应地,双数组trie树的复杂度为O(1)。当文本长度为k时,两者复杂度乘以k。虽然词典给定,n就是个常数。但在现实中,几十万的n显然不能等闲视之,要不然人们也不会提出双数组首字哈希等数据结构了。
好的何老师我明白您意思了,感谢答疑!祝好。