【问题标题】:In a Binary Search Tree what is the base of the log for Big O在二叉搜索树中,Big O 的日志的基础是什么
【发布时间】:2017-10-25 02:24:48
【问题描述】:

在讨论此表中的平均时间复杂度时。

O (log n)

我假设它是 2,但想验证一下。这些数据结构也总是 2 吗?

http://bigocheatsheet.com/

【问题讨论】:

    标签: performance binary-search-tree computer-science


    【解决方案1】:

    在 O 表示法中,常数无关紧要。例如,log2(n) 和 log10(n) 仅相差一个常数,这就是为什么在 O 表示法中只显示 log(n)

    【讨论】:

    • 我知道常量并不重要,但我不确定它是否会被视为常量。我得到 5 log(n) 和 10log(n)。你是说 2^n 和 8^n 也会有同样的大 O 吗?
    • 他们没有在我发布的链接中将 2 排除在 2^n 之外。你看到关系了吗?
    • 仅举一个例子:log2(n) = log10(n) * 3.3219...(长数)。只要尝试任何 n,你就会发现它是真的
    • 这不是我编的,它只是对数的一个属性
    • 关于 2^n 是否与 8^n 相同,不,它们没有常数差异
    【解决方案2】:

    Roman Cortes 在另一个答案中说对了:渐近复杂度无关紧要,因为当 ab 是大于一的整数时,很容易证明 log_a(n) = Theta(log_b(n))

    但是,我认为首先考虑 log 的来源仍然具有启发性 - 肯定有一些与它的动机相关的数字,并且理解可以帮助您首先得出这些界限。

    二叉搜索树的构造是为了快速搜索值。所有节点最多有两个子树,其中左子树中的所有值都小于父节点的值,右子树中的所有值都大于父节点的值。当你搜索一个平衡的二叉搜索树时(重要的是它是平衡的!),你有效地减半(或接近减半)剩余的节点数,以搜索目标值。我们可以使用运行时递归关系T(n) = T(n/2) + c 来表达这一点。这说:

    平衡二叉搜索树中搜索操作的运行时间由一个常数项给出,即比较目标与当前节点的值 (c) 加上搜索左子树或右子树的时间,但从不两者(T(n/2))。

    合理地假设T(0) = a 是一些常数a,我们可以写出T 的一些值:

    n    T(n)
    -    ----
    0    a
    1    T(1/2) + c = a + c
    2    T(2/2) + c = a + c + c = a + 2c
    4    T(4/2) + c = a + 2c + c = a + 3c
    8    T(8/2) + c = a + 3c + c = a + 4c
    ...
    2^k  T(2^k/2) + c = a + kc + c = a + (k+1)c
    

    k = log_2(n)。然后我们得到T(n) =T(2^k) = a + (k+1)c = a + (1 + log_2(n))c。因此,T(n) = O(log_2(n)) = O(log n)

    假设我们有一个平衡的三叉树,其中值是范围,并且适用以下规则:

    1. 如果目标的下限小于当前节点的下限,则目标在左子树中。
    2. 如果目标的上限大于当前节点的上限,则目标在右子树中。
    3. 否则目标位于中间子树中。

    所以,这可能是一个平衡的三叉搜索树:

              (10,20)
                 |
      +----------+----------+
      |          |          |
    (5,11)    (11,15)    (21,24)
                            |
                         (22,23)
    

    搜索可能像二分搜索一样工作,除了您检查两个条件而不是一个,并选择三个可能的子树之一而不是两个可能性之一。递归关系变为T(n) = T(n/3) + c',解最终变为T(n) = a' + (1 + log_3(n))c' = O(log_3(n)) = O(log n)

    【讨论】:

      猜你喜欢
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多