算法基本概念

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值