我已经用C语言创建了一个二进制搜索树,当我测试我的树时,插入和搜索操作需要花费不同的时间来执行。例如,我有两种情况,即插入1到10000之间的随机值,并插入1到10000之间的排序值。当我将1到10000的随机值插入我的BST时,比插入1到10000的排序值要少我的BST。
在我的BST中执行搜索操作的过程也是如此,在我搜索那些随机值时花费的时间更少,但是在我的BST中搜索排序的值时花费的时间太长。
现在,问题是时间的复杂性,任何人都可以解释,如何处理?这四种情况的时间复杂度是多少?
注意::插入和搜索这些排序后的值几乎需要相同的时间,而搜索仍然需要更长的时间!
答案 0 :(得分:1)
如果不平衡树,则其结构取决于插入顺序,“完全不平衡”的二叉搜索树等同于排序的链表。
因此,最差的操作时间复杂度在树的大小中是线性的,而不是平衡树中的对数。
例如,如果您从1开始插入并递增,则最终会得到
1
/\
2
/\
3
/\
...
其中右边的“脊椎”是链接列表。
答案 1 :(得分:0)
使用AVL树。它将使您的树保持平衡,并且您将始终获得log(n)的搜索时间