如何计算二元搜索树中 n 插入序列的摊销成本?输入序列是随机的,每个插入添加一个节点。
答案 0 :(得分:2)
我们希望能够分析单个操作的时间并对一系列操作进行平均。我们可以遵循摊销分析技术。
定义1
假设我们有一个支持某些操作的数据结构。让T (n)
成为在此数据结构上执行任何n
此类操作序列的最坏情况时间。然后,每个操作的摊销时间定义为T(n)/n.
(source)
因为你有一个二进制搜索树,这意味着在最坏的情况下你会有一个链表(左边的所有元素或右边的所有元素)。
如果您有n
插入操作T(n) = 1+2+...n = (n * (n-1)) / 2 = (n^2 - n) / 2.
定义1每次操作的摊销时间=(n - 1)/ 2. O(n)
也许我解释错了,所以如果你这么想请评论。
答案 1 :(得分:0)
通常,您可以为随机插入序列生成粗略平衡的二叉树,这意味着平均节点高度与log(n)成比例(有关说明,请参阅Wikipedia)。摊还时间=总时间/操作次数。总时间等于平均高度*元素数,或O(n * log(n))。由于总时间为O(n * log(n)),因此摊销时间为O(log(n))。