之前在递回的篇章有介绍过费波那契数列,是使用递回的方式实作,但是从下面递回的树状图来看,会发现有很多重复的节点,递回的深度越深,重复计算的节点也就越多,甚至会出现RecursionError的情况,而这样的时间复杂度为O(2^n)。
因此可以将会重复计算的部分暂存起来
,避免重覆计算
来增加处理效能。
def fibonacci(n):
if n == 0 or n == 1:
return n
seq = [0 for _ in range(n + 1)]
seq[0] = 0
seq[1] = 1
for i in range(2, n + 1):
seq[i] = seq[i-1] + seq[i-2]
return seq[n]
fibonacci(8)#21
透过上面的方式,可以发现真正被计算到的只剩下橘色部分
,蓝色框
为已经被储存在seq列表
中,不需要重复计算,时间复杂度变为O(n)
根据上述方式,空间复杂度为O(n),但还可以有更进阶的方式来节省空间
。
def fibonacci(n):
if n == 0 or n == 1:
return n
a = 0
b = 1
for i in range(2, n+1):
c = a + b
a = b
b = c
return b
fibonacci(8)#21
重新赋值
空间复杂度就能从原本的O(n)变成O(1)。
今天我们要介绍的是python的Numpy,所谓的Numpy就是python里面的其中一个套件。 安...
前言 非常感谢六角学院在今年疫情最严重的5、6月份,提供了一系列的线上体验学习课程,能够从课程中,再...
Mocks Service Worker 先来介绍一下msw,因为我们要模拟真实的环境不可能随时都使...
『像素操作(Pixel Manipulation)』 顾名思义就是要去以单一像素为最小单位来进行操作...
Event Bus 前面提到了父子元件透过emit & prop进行参数传递,当树状结构逐渐...