数据结构与算法——打卡第一天

算法

算法:解决问题的思路。
算法的5大特性:
1)输入:算法具有0个或多个输入;
2)输出:算法至少有1个或多个输出;
3)有穷性:算法在有限的步骤之后会自动结束而而不会无限循环,并且每一个步骤可以在可接受的时间内完成;
4)确定性:算法中的每一步都有确定的含义,不会出现二义性;
5)可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成。

算法效率衡量

一、时间复杂度

用基本运算数量来描述时间复杂度。
时间复杂度的几条基本计算规则:
1.基本操作,即只有常数项,认为其时间复杂度为O(1);
2.顺序结构,时间复杂度按加法进行计算;
3.循环结构,时间复杂度按乘法进行计算;
4.分支结构,时间复杂度取最大值,看最复杂的那个分支;

二、大O记法

时间复杂度记为T(n),去掉系数和常数,T(n)=3n²与T(n)=100n²为一个量级。

执行次数函数举例
12O(1)
2n+3O(n)
3n²+2n+1O(n²)
总结:O(1)<O(logn)<O(n)<O(nlogn)<O(n²) <O(n³)<O(2n)<O(n!)<O(nn)

三、最坏时间复杂度

算法完成工作最少需要多少基本操作——最优时间复杂度
算法完成工作最多需要多少基本操作——最坏时间复杂度
算法完成工作平均需要多少基本操作——平均时间复杂度
我们主要关注算法的最坏情况,亦即最坏时间复杂度

四、Python内置类型性能分析

timeit模块
timeit模块可以用来测试一小段Python代码的执行速度。
Class timeit.Timer(stmt=‘pass’,setup=‘pass’,timer=)
timeit.Timer.timeit(number=10000)
测量的是平均速度
Timer是测量小段代码执行速度的类
stmt参数是要测试的代码语句(ststment)
setup参数是运行代码时需要的设置
timer参数是一个定时器函数,与平台有关,一般用默认值就好了

#list的各个操作的速度测试
def test1():
    l=[]
    for i in range(1000):
        l=l+[i]

def test2():
    l=[]
    for i in range(1000):
        l.append(i)

def test3():
    l=[i for i in range(1000)]

def test4():
    l=list(range(1000))

def test5():
    l=[]
    for i in range(1000):
        l.extend([i])

def test6():
    l=[]
    for i in range(1000):
        l.insert(0,i)

from timeit import Timer

t1=Timer('test1()',"from __main__ import test1")
print('+',t1.timeit(number=100),"seconds")
t2=Timer('test2()','from __main__ import test2')
print('append',t2.timeit(number=1000),'seconds')
t3=Timer('test3()','from __main__ import test3')
print('comprehension',t3.timeit(number=100),'seconds')
t4=Timer('test4()','from __main__ import test4')
print('list range',t4.timeit(number=100),'seconds')
t5=Timer('test5()','from __main__ import test5')
print('extend',t5.timeit(number=100),'seconds')
t6=Timer('test6()','from __main__ import test6')
print('insert',t6.timeit(number=100),'seconds')
#pop操作测试
from timeit import Timer

x=list(range(2000000))
pop_zero=Timer('x.pop()','from __main__ import x')
print('pop_zero',pop_zero.timeit(number=100),'seconds')

x=list(range(2000000))
pop_end=Timer('x.pop(0)','from __main__ import x')
print('pop_end',pop_zero.timeit(number=100),'seconds')
OperationBig-O Efficiency
index[ ]O(1)
appendO(1)
pop()O(1)
pop(i)O(n)
insert(i,item)O(n)
contains(in)O(n)

五、数据结构

数据结构:数据对象中数据元素之间的关系
抽象数据类型:把数据类型和数据类型上的运算捆在一起,进行封装。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值