算法入门概念——时间复杂度、空间复杂度、递归

算法

算法:一个计算过程,解决问题的方法
程序=数据结构加算法


时间复杂度

评估算法运行效率

O(1)

print('Hello World')
print('Hello World')
print('Hello Python')
print('Hello Algorithm')

O(n)

for i in range(n):
	prnt('Hello World')
for i in range(n):
	print('Hello World')
	for j in range(n):
		print('Hello World')

O( n 2 n^{2} n2)

for i in range(n):
	for j in range(n):
		prnt('Hello World')

O( n 3 n^{3} n3)

for i in range(n):
	for j in range(n):
		for k in range(n):
			prnt('Hello World')

1 1 1, n n n, n 2 n^{2} n2, n 3 n^{3} n3···都是单位,不能进行相加等运算

O( log ⁡ n \log n logn)或O( log ⁡ 2 n \log_{2}{n} log2n)

while n>1:
	print(n)
	n=n//2

如果n=64,输出为:

64
32
16
8
4
2

6个数 2 6 = 64 , l o g 2 64 = 6 2^{6}=64,log_{2}{64}=6 26=64log264=6
所以时间复杂度为O( log ⁡ n \log n logn)或O( log ⁡ 2 n \log_{2}{n} log2n)——当算法出现循环折半时 l o g n logn logn

小结

  • 时间复杂度是用来估计算法运行时间的式子(单位)
  • 常见时间复杂度
    • O(1)<O( log ⁡ n \log n logn)<O( n n n)<O( n log ⁡ n n\log n nlogn)<O( n 2 n^{2} n2)<O( n 2 log ⁡ n n^{2}\log n n2logn)<O( n 3 n^{3} n3)
  • 复杂问题的时间复杂度——不常见
    • O( n ! n! n!) O( 2 n 2^{n} 2n) O( n n n^{n} nn)···

空间复杂度

  • 用来评估算法内存占用大小的式子
  • 表示与时间复杂度相同
    • 算法使用了几个变量 O(1)
    • 算法使用了长度为n的一维列表 O( n n n)
    • 算法使用了m行n列的二维列表 O( m n mn mn)
  • ”空间换时间“
    ∵ \because 时间比空间重要

递归

特点

  • 调用自身
  • 结束条件
def func(x):
	if x>0:
		print(x)
		func3(x-1)

汉诺塔问题

Engelbart|50

  1. 将n个盘子分为上面(n-1)个和最下面一个
  2. 将(n-1)个盘子从A经过C移动到B
  3. 将第n个盘子移动到C
  4. 将(n-1)个盘子从B经过A移动到C
代码
def hanoi(n,a,b,c):                  # 将n个盘子从a经过b移动到c
	if n>0:                          # 结束条件
		hanoi(n-1,a,c,b)             # 将(n-1)个盘子从a经过c移动到b
		print("moving from %s to %s"%(a,c))
		hanoi(n-1,b,a,c)

∴ h ( x ) = 2 h ( x − 1 ) + 1 \therefore h(x)=2h(x-1)+1 h(x)=2h(x1)+1

  • 34
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值