【问题标题】:How to reduce the time and space complexity of the function foo(n)?如何降低函数 foo(n) 的时间和空间复杂度?
【发布时间】:2020-02-21 12:57:49
【问题描述】:

foo 函数的时间复杂度是 O(n^2) 但我需要减少它并且似乎无法弄清楚。

def bar ( n ):
    if n == 0 :
        return 0
    else :
        return n + bar ( n - 1 )

def foo ( n ):
    if n == 0 :
        return 0
    else :
        return bar ( n ) + foo ( n - 1 )

【问题讨论】:

    标签: python time big-o


    【解决方案1】:

    你可以像这样改进bar

    def bar(n):
        return n * (n + 1) / 2
    

    这应该将foo 减少到 O(n)。

    您甚至可以将foo 定义为:

    def foo(n):
        return n * (n + 1) / 4 + n * (2 * n + 1) * (n + 1) / 12
    

    在 O(1) 中有一个函数 :)

    【讨论】:

    • 你能解释一下最后一个词吗? n * (2 * n + 1) * (n + 1) / 12
    • 为什么两个成员都除以 2?
    • 因为你在做 sum(sum i)) = sum i * (i + 1) / 2 = 1 / 2 * [ sum i + sum i² ]
    • 我们有 bar = sum (n); foo = n (sum n) = sum (n2); foo + bar = (n+1) (sum n) = sum n2 + sum n = sum (n2 + n) = sum (n)(n+1) 。我真的没有得到 1/2 的系数...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2011-06-15
    • 2015-05-05
    • 1970-01-01
    • 2022-10-08
    • 2016-01-08
    相关资源
    最近更新 更多