一什么是算法: 解决问题的策略机制,重要的是思想
求满足a+b+c=1000,a^2+b^2=c^2 条件的所有a,b,c
思路:枚举法,以下被注释掉的语句就是枚举每个满足条件的a,b,c ,但是这段语句的算法复杂度太大
改进:a,b的值就确定了c的值,故 改进算法如下
import time
start_time=time.time()
# for a in range(0,1001):
# for b in range(0, 1001):
# for c in range(0, 1001):
# if a+b+c==1000 and a**2+b**2==c**2:
# print('a:',a,'b:',b,'c:',c)
for a in range(0,1001):
for b in range(0, 1001):
c=1000-a-b
if a**2+b**2==c**2:
print('a:',a,'b:',b,'c:',c)
end_time=time.time()
time=end_time-start_time
print('time:',time)
二特征:输入,输出,可行性,确定性,有穷性
三时间复杂度:对数据总的操作次数
每台机器执行的总时间不同,但是执行的基本运算数量大体相同
系数并不影响走势,n^2 抛物线,n^3
最优时间复杂度:算法完成工作最少需要多少基本操作
最坏时间复杂度:算法完成工作最多需要多少基本操作
平均时间复杂度:算法完成工作平均需要多少基本操作
基本时间复杂度
list内置操作的时间复杂度
index o(1)
append o(1)
pop() o(1)
pop(i) o(n)
insert(i,item) o(n)
del operator o(n)
iteration o(n)
contains(in) o(n)
get slice[x:y] o(k)
del slice o(n)
set slice o(n+k)
reverse o(n)
sort o(nlogn)
multiply o(nk)
dict内置操作的时间复杂度
copy o(n)
get item o(1)
set item o(1)
del item o(1)
iteration o(n)
contains(in) o(1)
四常用内置算法与数据结构
sorted dict list set tuple bisect(二分算法) heapq(堆算法)