【发布时间】:2018-04-14 14:51:07
【问题描述】:
这不是获取斐波那契数列的最有效方法,但我正在学习 Big O,并希望确认和解释以下代码的空间和时间效率。代码是用 Python 编写的,我编写它以便我使用一个列表并附加到它并返回最后一个值。
append 方法需要 O(1) 时间,如 here 所示,但我正在执行该操作几乎 n 次,所以我会得到 O(n) 的时间复杂度吗?
关于空间复杂度,我是否应该考虑将空间用作arithmetic series,因为如果输入的数字大于开头给函数堆栈的数字,则必须将列表移动到其他位置?
question 中的代码用于递归方法。
def getFib(position):
if position == 0:
return 0
if position == 1:
return 1
list_ = [0, 1]
previous = 1
for pos in range(2, position+1):
list_.append(list_[pos-1] + list_[pos-2])
return list_[position]
if __name__ == "__main__":
print(getFib(0))
print(getFib(1))
print(getFib(2))
print(getFib(3))
print(getFib(4))
print(getFib(5))
print(getFib(6))
print(getFib(7))
print(getFib(8))
print(getFib(9))
【问题讨论】:
-
这是 O(n) 时间和空间复杂度?您正在从
0 to n执行for循环。每次添加新项目时。 -
您有一个循环,该循环采用
position步骤并创建大小为position的列表。看起来很简单。