繁体   English   中英

简单 Python 函数的时间复杂度

[英]Time complexity of a simple Python function

我得到了一个简单的 Python 程序,如下所示:

def boo(n):
    if n == 1:
        return 1
    else:
        return boo(n/2) + boo(n/2)

嘘,我必须找出函数的时间复杂度。 我的想法是,由于每个n都会调用另外两个boo ,因此时间复杂度为O(2^n) 然而,事实证明这是错误的。 答案已经告诉我,实际的时间复杂度是 O(n),没有给出基本原理。 我的预感是boo(n/2) + boo(n/2)可以被视为2*boo(n/2) ,但我对此非常怀疑,因为我之前见过类似的情况,我依稀记得boo(n/2) + boo(n/2)不能等同于2*boo(n/2)在处理步骤方面。

什么是更合适的方式来理解这一点? 我仍在按增长顺序(空间和时间复杂性)努力解决这些想法,所以如果有人有任何可能对我有帮助的一般性建议或材料,我非常欢迎他们。 非常感谢!

这段代码是O(∞) ,因为非 2 的幂输入永远不会完成(它将从> 1< 1而不是== 1 )。

对于 2 的幂(或者如果正确重写以执行boo(n // 2)而不是无限递归),它是O(n) ,因为每一步都将输入减半,但是这会减半两次,从而导致整体线性性能(准确地说,因为n是 2 的幂,所以boo被称为2n - 1次)。 将最后一行更改为return boo(n // 2) * 2将使其达到O(log n)性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM