时间复杂度
def func():
a = 2 * 3
计算次数:1,时间复杂度:常数复杂度O(1).
def func(n):
n = 10
for i in range(n):
a = 2 * 3
计算次数:n,时间复杂度:线性复杂度O(n).
def func(n):
n = 10
for i in range(n):
for j in range(n):
a = 2 * 3
计算次数:,时间复杂度:多项式复杂度.
def func(n):
for i in range(n):
for j in range(i,n): // i=0时,第二层循环执行n次;i=1时,第二层循环执行n-1次
a = 2 * 3
计算次数:.
时间复杂度:,在时间复杂度的表示中,为了方便,一般只保留最高次的项,且不保留系数,所以,上述代码的时间复杂度可以是.
def func(n): // 递归
n = 10
if n <= 1: return n
return func(n-1) + func(n-1)
时间复杂度:指数复杂度.
def func(n):
if n <= 1: return n
return func(n//2)+1 // n除以2,再加一
时间复杂度:对数复杂度,以2为底的log n.
def func(n):
if n <= 1: return
mid = n // 2
for i in range(mid+1m,n):
a = 1
func(mid)
时间复杂度:渐进复杂度O(n).
a = [] // 全局数组a
def func(x):
if x == 0:
a.push(x) // 如果传入的是0,则往a里放一个0
else:
while a.size() > and x > 0: // 如果传入的不是0,则从a里pop出x个
a.pop()
x -= 1
x == 0时,
单次操作时间复杂度:O(1)
n次操作时间复杂度:O(n)
x != 0时,
单次操作时间复杂度:O(n)
n次操作时间复杂度:
但是,总的pop次数不会超过全部push(x == 0)的次数,所以总体的复杂度为O(n).
在每一步的计算次数都不同的时候,往往我们直接考虑总体次数,就能想明白问题了。
时间复杂度:均摊复杂度O(n),也是线性复杂度
算法常数:计算次数的最高次项前面的系数,也可以是单语句的计算时间。
如果你的程序跑得慢
- 是否时间复杂度不对
- 是否常数太大
在leecode上程序运行时间打败了多少人,这个评判标准仅供参考,并不具有绝对指导意义,因为程序运行时间除了和时间复杂度有关外,还和具体的数据规模挂钩,例如:
与,在n等于2时,复杂度高的运行时间反而短。