二叉搜索树的运行时复杂度

时间:2013-10-31 06:09:54

标签: data-structures random big-o binary-search-tree time-complexity

我已经知道你是否试图找到具有特定键的项目最坏情况下的运行时间 是O(n)n是节点数。如果您尝试按其键的顺序打印出所有数据项,则最坏情况的运行时间为O(n)。如果您尝试搜索特定数据项(您不知道密钥),则最坏情况的运行时间为O(n)。但是,如果键和数据都是整数,则输入项在插入之前随机加扰。最糟糕的运行时间是否仍然相同?

2 个答案:

答案 0 :(得分:5)

在最坏的情况下,是的。随机构建的具有n个节点的BST具有2 n-1 / n!建造简并的机会,这是非常罕见的,因为n达到任何合理的尺寸但仍然可能。在这种情况下,查找可能需要Θ(n)时间,因为搜索可能需要一直下降到最深的叶子。

在期望中,树高将为Θ(log n),因此查找将花费预期的O(log n)时间。

顺便说一句,打印树的时间与树的形状无关。它总是Θ(n)。

希望这有帮助!

答案 1 :(得分:2)

您可能无法更改正常BST的最坏情况运行时间,但是,如果您将输入随机化(在小于O(log n)时间内,如果您的目标是O(log n)整体)那么最坏情况发生的可能性非常罕见。参见数学分析here

如果您对保证O(log n)时间感兴趣,可以使用红色黑树等Balanced BSTs。但是,打印时间仍为O(n),因为您仍然需要访问每个并且每个节点都可以打印出来。