【问题标题】:The time complexity of doing O(h) algorithm n times做 O(h) 算法 n 次的时间复杂度
【发布时间】:2020-05-02 22:55:16
【问题描述】:

当 h 是 BST 中节点的高度 n 倍(树中元素的数量)时,做 O(h) 算法的时间复杂度是多少,我相信它是 O(n) 而不是 O(n* h) 但我不知道如何证明这一点。

在 O(h) 中工作的特定算法是在 BST 中查找元素的有序前驱。

【问题讨论】:

    标签: algorithm time-complexity binary-search-tree


    【解决方案1】:

    在任何 BST 中计算 n 次中序后继的成本是 O(n)。要看到这一点,请计算您触摸树中每个边缘的次数。当你第一次探索子树时,你将沿着边缘传递一次,离开它之后再传递一次。总的来说,这意味着您最多触摸每条边两次,因此完成的总工作量为 O(n)。

    请注意,一般而言,您可以在 O(hn) 处具有高度 h 的 BST 上执行 n O(h) 次的成本上限,并且永远不会低估事情。但是,如果您更具体地了解您正在使用的算法,例如在本例中,您可以获得更严格的界限。

    【讨论】:

      【解决方案2】:

      O(n²)

      二叉搜索树是不平衡的,这意味着节点的高度可以等于树的节点数,因此 O(n²)。

      【讨论】:

      • 虽然通常做 O(h) 的工作 O(n) 次的上限可能是 O(n^2),但在这种特定情况下,这个界限是松散的,可以收紧。跨度>
      • 取决于算法的方法。算法本身确实可以绑定到 O(n)。但是,如果您拥有的树的唯一信息是根怎么办?然后找到每个节点将花费 O(h) ,除非您获得对节点本身的引用或存储此引用,这并不常见。 AFAIK,找到节点是在找到其前身之前的要求。
      • 你是对的,从根开始向下搜索需要很长时间。如果您从先前发现的节点而不是树的根开始搜索,则搜索速度会快得多。
      猜你喜欢
      • 2015-06-12
      • 2015-05-25
      • 1970-01-01
      • 2021-04-24
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多