【问题标题】:BST tree- running timeBST 树运行时间
【发布时间】:2014-05-10 07:28:40
【问题描述】:

我有一个伪代码:

function func(BST t):
    x = MIN(t)
    for i=1..n do:
        print x.key
        x = SUCCESSOR(x)

现在,我需要证明它的运行时间是 THETA(n)。 但是,我知道 SUCCESSOR 的运行时间是 O(logn),因此运行时间是 O(nlogn)。 我的错在哪里?

提前致谢...

【问题讨论】:

  • n从哪里来,和t有什么关系吗?
  • n= BST t 中的节点数

标签: performance algorithm binary-search-tree


【解决方案1】:

有两种可能:

  • 这不是真的,运行时间是O(nlogn)
  • 您知道 SUCCESSOR 的精确实现,它具有上限对数复杂度(如上所述,O(logn)),但您可以推断,当一个接一个地执行它时,它实际上退化为 @ 987654323@。事实上,在 BST 中良好的 SUCCESSOR 实现应该分摊了 theta(1) 的复杂性,因为在整个 func 执行期间每个节点将被访问最多两次

【讨论】:

    【解决方案2】:

    这真的取决于你的 BST 的实现,但是如果你的 BST 拥有一个“父”节点,并使用它来寻找后继节点,它将需要遍历每条边最多两次 - 一次“向下”,第一次到达节点,一次“向上”,从节点返回。

    由于一棵树有n-1 边,你得到最多2*(n-1) 条边读取,这是O(n)

    请注意,SUCCESSOR() 函数的最坏情况确实是O(logn),但如果按照我描述的方式实现,则平均情况是O(1)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      相关资源
      最近更新 更多