如何解决这种斐波那契实现的时间复杂度是多少?
只是想知道是否有人可以解释这段代码背后的时间复杂度。谢谢!
xfun::session_info('rmarkdown')
解决方法
我们可以将代码分为几部分,并进行逐部分分析。
var arr = [0,1,1];
这部分有O(1)
,因为它甚至不依赖于N
。
for (i = 3; i <= N; i++) {
arr[i] = arr[i - 1] + arr[i - 2];
}
数组中的数字越多,从数组中获取两个元素所花费的时间就越多,但是相差很小,因此我们可以近似地将arr[i] = arr[i - 1] + arr[i - 2];
的执行时间视为常数。因此,我们必须执行与N
一样大的代码。这部分的时间复杂度是如此O(n)
。
return arr[N];
再次执行arr[3]
或arr[10000000]
之间的差异可以忽略不计,因此每次O(1)
的时间复杂度都是相同的。
此代码的总时间复杂度是各部分的最大复杂度,因此为O(n)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。