【问题标题】:What is the amortized cost of a sequence of n insertion in a binary search tree?在二叉搜索树中插入 n 个序列的摊销成本是多少?
【发布时间】:2012-11-17 02:12:06
【问题描述】:

如何计算二叉搜索树中 n 个插入序列的摊销成本?输入序列是随机的,每次插入增加一个节点。

【问题讨论】:

  • @jozefg no the tree in not self-balance basic Binary search tree
  • @jozefg 但这种分析是否足够严密。我们不知道将是输入序列。如果它产生一个平衡树,那么每次插入将花费 O(lgn) 时间。对于 n 插入 nO(logn)。因此,每次操作的摊销成本变为 nO(logn)/n = O(lgn)。对不对。

标签: algorithm binary-search-tree amortized-analysis


【解决方案1】:

我们希望能够分析单个操作的时间并在一系列操作中对其进行平均。我们可以遵循摊销分析技术。

定义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)

也许我理解错了,如果你认为是,请评论。

【讨论】:

    【解决方案2】:

    通常,您可以期望为随机插入序列生成一个大致平衡的二叉树,这意味着平均节点高度与 log(n) 成正比(请参阅Wikipedia 以获得解释)。摊销时间=总时间/操作次数。总时间等于平均高度 * 元素数,或 O(n * log(n))。由于总时间为 O(n * log(n)),因此摊销时间为 O(log(n))。

    【讨论】:

    • 我相信摊销分析可以保证每个操作在最坏情况下的平均性能......但您可能没有采取最坏的情况。
    • 摊销时间通常意味着平均情况(特别是因为问题中指定了“随机序列”)。
    • 你没有混淆 Splay_tree 吗? en.wikipedia.org/wiki/Splay_tree
    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 2016-01-17
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多