【算法入门-Python】01_复杂度问题

复杂度问题

一、估计算法运行效率与时间的复杂度

时间复杂度:用来评估算法运行效率的一个式子

# O(1)
# eg1:
print('Hello Word')
# eg2:
print('Hello World')
print('Hello Python')
print('Hello Algorithm')

打印几次都是O(1),1 是一个单位,近似的概念

# O(n)
for i in range(n):
    print('Hello World')
# O(n*n)
# eg1:
for i in range(n):
    for j in range(n):
		print('Hello World')

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

留大的单位(留n方,不留n),一个大概的时间

# O(n*n*n)
for i in range(n):
    for j in range(n):
        for k in range(n):
            print('Hello World')

例题1:

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

n=64,输出:64 32 16 8 4 2;2的6次方等于64;

该题的时间复杂度记为:
O ( log ⁡ 2 n ) 或者 O ( l o g n ) O(\log_{2}{n}) 或者O(logn) O(log2n)或者O(logn)

  • 小结:

    1. 时间复杂度是用来估计算法运行时间的式子(单位)。

    2. 一般来说(机器差不多 规模差不多),时间复杂度高的算法比复杂度低的算法慢。

    3. 常见的时间复杂度(按效率排序)
      O ( 1 ) < O ( l o g n ) < O ( n ) < O ( n l o g n ) < O ( n 2 ) < O ( n 2 l o g n ) < O ( n 3 ) O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^2logn)<O(n^3) O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)

    4. 复杂问题的时间复杂度
      O ( n ! ) O ( 2 n ) O ( n n ) . . . . . . O(n!) O(2^n) O(n^n) ...... O(n!)O(2n)O(nn)......

二、简单判断时间复杂度

  • 如何判断算法复杂度

    • 快速判断算法复杂度(适用于绝大多数简单情况):

      1. 确定问题规模n
      2. 循环减半过程—>logn
      3. k层关于n的循环—>n^k
    • 复杂情况:根据算法执行过程判断。

三、空间复杂度

  • 空间复杂度:用来评估算法内存占用大小的式子

  • 空间复杂度的表示方式与时间复杂度完全一样

    • 算法使用了几个变量:O(1)
    • 算法使用了长度为n的一维列表:O(1)
    • 算法使用了m行n列的二维列表:O(mn)
  • “空间换时间”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值