常见四种场景
- 执行次数为线性的, T(n)
def eatBread(n):
for i in n:
print("eat bread",i)
- 执行次数为对数,T(n)=logn
每一次都是减去一半
def eatBread(n):
i = 1
while i<=n:
i = i * 2
print("eat bread")
-
执行次数为常数,T(n)=1.
def eatBread(n):
print(“eat bread”) -
执行次数为多项式,T(n)=0.5*n^2+0.5n
一条长10寸的面包,吃掉第一个一寸需要1天时间,吃掉第二个一寸需要2天时间…吃完要多少天
1加到10,[(n+1)*n]/2
def eat(n):
while i<n:
while j<i:
print("等待一天")
j+=1
print("eat bread")
i+=1
概念:若存在函数 f(n),使得当n趋近于无穷大时,T(n)/ f(n)的极限值为不等于零的常数,则称 f(n)是T(n)的同数量级函数。记作 T(n)= O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
最好最坏时间复杂度
一段循环中,如果里面带有判断条件,有可能第一个条件就跳出循环,那么O(1),有可能最后才跳出循环,那么O(N);第一种情况就是最好情况时间复杂度,第二种是最坏情况时间复杂度
平均复杂度和摊还分析复杂度先不理~
常见问题
- 空间复杂度的描述?
空间复杂度是指除了原本的数据存储空间外,算法运行还需要额外的存储空间。例如栈需要存储大小为n的数组,这些是无法省掉的,在入栈和出栈过程中,只需要一两个临时变量存储空间,所以空间复杂度是 O(1)