【问题标题】:time complexity - bigO notation时间复杂度 - 大 O 表示法
【发布时间】:2017-03-24 10:20:43
【问题描述】:
def my_sum(i, j):
    if i == j:
        return i
    mid = (i + j) //2
    return my_sum(i, mid) + my_sum(mid + 1, j)

为什么是O(j - i) 而不是O(log n)(j >= i)

【问题讨论】:

  • 不确定。您是否尝试运行该算法并观察它正在执行的步骤?这通常有助于真正了解正在发生的事情。

标签: big-o


【解决方案1】:

对于每个递归调用,算法将j-i 分成两半。递归深度将是获取 i == j 所需的递归调用数,每个分支将是 log2(j-i)

因此,该算法形成了一个递归树,其分支因子为b,为2,深度为d,为log2(j-i)。时间复杂度是树中的项目数:

  b^d
= 2^log2(j-i)
= j-i

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 2014-05-29
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多