首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fibonacci序列的时间和空间复杂度

Fibonacci序列的时间和空间复杂度
EN

Stack Overflow用户
提问于 2018-04-14 14:51:07
回答 1查看 473关注 0票数 0

这不是获取Fibonacci序列号的最有效方法,但我正在学习Big,并希望确认和解释下面代码的空间和时间效率。代码是用Python编写的,因此我使用一个列表并将其附加到其中,然后返回最后一个值。

追加方法需要O(1)时间,如图中所示的这里,但是我做了几乎n次的操作,所以我会得到时间复杂度的O(n)吗?

关于空间复杂性,我是否应该考虑作为算术级数使用的空间,因为如果输入的数字大于函数堆栈开始时的大小,列表就必须移到别处?

问题中的代码用于递归方法。

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-14 14:59:16

时间复杂性:O(n),因为您正在执行n乘以具有恒定时间复杂度的循环。

空间复杂性:O(n),因为您要在列表中存储n数字。

当然,您不需要存储所有的数字,而只需要存储最后两个值。这样就可以将空间复杂度降低到O(1)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49832733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档