【发布时间】:2016-01-29 01:16:08
【问题描述】:
我无法理解为什么尝试的查找时间为 O(1),而二叉树的查找时间为 O(logn)。
我知道它们基本上是树。假设我有一个英语语言的 trie,包含最多 16 个字符的单词。查找时间为 O(16),简化为 O(1)。这是因为每个 trie 节点都有一个包含 26 个子节点的数组(字母表中的 26 个字母),从数组中拉取是 o(1)。所以你只需要做 16 次拉动。
而对于二叉树,如果你有 n 个元素(比如 n 非常大......整个英文字母表),你搜索中间元素,然后根据你的元素是低还是高搜索小节的中间,然后是那个的子集,等等等等......基本上每次除以2得到O(n的log base 2)。
每个的逻辑都是有道理的。但我觉得我错过了什么。
两者之间的主要区别是什么,它允许尝试在恒定时间内完成查找,而二叉树需要 O(logn)?您不能将二叉树构造为基本上只有 2 个孩子的 trie 吗?我想我很难确定差异。
【问题讨论】:
-
奇怪的是,如果您将数据集限制为以字母
a开头的单字母单词,二叉树也变成O(1):-)复杂性分析是当数据集任意变大时发生的情况。 -
@paxdiablo 所以......对于我正在考虑的小案例来说,它们基本上是同一个大问题,我只是没有考虑到极其庞大的数据集,在那里尝试仍然会受到 16 个字符长度限制的限制,但由于 n?,二叉树将大量膨胀
-
不,不完全是。例如,如果列表只有几个元素长,则排序列表的顺序搜索和二进制搜索可能都具有相似的 运行时,但算法的复杂性是不一样。前者是O(n),后者是O(logN)。复杂性是算法的属性,而不是数据的属性。
标签: binary-tree trie