一什么是算法: 解决问题的策略机制,重要的是思想
求满足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(堆算法)
1398

被折叠的 条评论
为什么被折叠?



