python第15天数据结构引入

一、算法引入
例子:如果a+b+c=1000,且a^2+b^2=c^2(abc是自然数),如何求出abc可能组合
思路一:挨个试枚举法
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,b,c:%d,%d,%d"%(a,b,c))
end_time=time.time()
print("time:%d"%(end_time-start_time))
T=1000*1000*1000*2
T(n)=n^3*2
渐进函数g(n)=n^3
124秒
思路二:c=1000-a-b
import time
start_time=time.time()
for a in range(0,1001):
    for b in range(0,1001):
        c=1000-a-b
        if a+b+c==1000 and a**2+b**2==c**2:
                print("a,b,c:%d,%d,%d"%(a,b,c))
end_time=time.time()
print("time:%d"%(end_time-start_time))
T(n)=n*n*2
g(n)=n^2
1秒
二、时间复杂度通常指最坏时间复杂度
    基本操作,即只有常数项,认为其时间复杂度为O(1)
    顺序结构,时间复杂度按照加法计算
    循环结构,时间复杂度安照乘法计算
    分支结构,时间复杂度取分支的最大值
    常见时间复杂度的关系:
    O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
三、代码执行时间测量模块
from timeit import Timer
def t1():
    l=[]
    for i in range(10000):
        l=l+[i]
def t2():
    l=[]
    for i in range(10000):
        l+=[i]
def t3():
    l=[i for i in range(10000)]
def t4():
    l=list(range(10000))
timer1=Timer("t1()","from __main__ import t1")#(‘测算的语句’,‘当前导入的模块’)
print("+:",timer1.timeit(1000))#测算1000c次
timer2=Timer("t2()","from __main__ import t2")
print("+:",timer2.timeit(1000))#测算1000c次
timer3=Timer("t3()","from __main__ import t3")
print("+:",timer3.timeit(1000))#测算1000c次
timer4=Timer("t4()","from __main__ import t4")
print("+:",timer4.timeit(1000))#测算1000c次
四、list内置操作的时间复杂度
    index[]         O(1)
    append          O(1)
    pop()           O(1)
    insert()        O(n)
    del()           O(n)
    iteration       O(n)
    contains(in)    O(n)
    reverse         O(n)
    sort            O(nlogn)
五、字典内置操作时间复杂度
    copy            O(n)
    get item        O(1)
    delete item     O(1)
    contains(in)    O(1)
    iteration       O(1)
总结:
    程序=数据结构+算法
    算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值