算法基本概念

一什么是算法: 解决问题的策略机制,重要的是思想

求满足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(堆算法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值