数据结构和算法第一天~算法概念特征,时间复杂度,timeit模块

算法概念:

就是计算机处理信息的本质,告诉计算机每一步该怎么去执行,算法是计算机确切步骤的描述

 

算法是独立存在的一种解决问题的方法和思想

 

五大特征:

  1. 输入:算法具有0个或者是多个输入
  2. 输出:算法至少有一个或者是多个输出
  3. 有穷性:算法在有限个步骤以后会自动结束而不是无限的循环,并且每一个步骤可以在接受的时间范围内结束运行
  4. 确定性:算法中的每一步都都自己的含义,不会出现二义性
  5. 可行性:给出的思路最后能用计算机语言实现出来

算法的效率衡量---时间复杂度-----经过多少基本运算数量

T(n)=n^3*k  时间复杂度  

大O记法   忽略T(n)的系数k  记作T(n)=n^3

时间复杂度:

  1. 算法完成工作最少需要多少基本操作:就是最优时间复杂度
  2. 算法完成工作最多需要多少基本操作:就是最坏时间复杂度
  3. 算法完成工作平均需要多少基本操作:就是平均时间复杂度

最坏时间复杂度:在此种程度的基本操作中一定能完成工作

时间复杂度的几条基本规则

  1. 基本操作:也就是当只有常数项时间复杂度为O(1)
  2. 顺序结构:用加法进行计算
  3.  循环结构:用乘法来进行时间复杂度的计算
  4.  分支结构:取两个分支里面的最大值
  5. 判断一个算法的效率的时候,往往只需要关注操作数量的最高此项,其他次要项和常数可以忽略,就像是上面例子中的T(n) , 我们只需要关注最高次项,忽略掉系数还有常数,也就只需要关注G(n)
  6. 在没有特殊说明的时候,我们所分析的算法的时间复杂度都是指的是最坏时间复杂度

时间复杂度排序

 

timeit模块:

可以测试一小段Python执行速度

class timeit.Timer(stmt='pass',setup='pass',timer=<timer function>)

Timer 是测试执行速度的类

stme是要执行的代码

setup是运行代码时需要的设置

timer是定时器参数与平台有关

 

 timeit.Timer.timeit(number=1000000)

测试语句的方法,测试1000000次,方法返回平均耗时,一个float类型秒数

 

列表类型不同,操作时间不同

#列表类型不同操作时间顺序
def test1():
    li = []
    for i in range(100000):
        li.append(i)

def test2():
    li = []
    for i in range(100000):
        li += [i]

def test3():
    li = [i for i in range(100000)]

def test4():
    li = list(range(100000))

def test5():
    li = []
    for i in  range(100000):
        li.extend([i])

timer1 = Timer('test1()','from __main__ import test1')
print('append:',timer1.timeit(1000))
timer2 = Timer('test2()','from __main__ import test2')
print('+:',timer2.timeit(1000))
timer3 = Timer('test3()','from __main__ import test3')
print('tuidao:: ' , timer3.timeit(1000))
timer4 = Timer('test4()','from __main__ import test4')
print('list::',timer4.timeit(1000))
timer5 = Timer('test5()','from __main__ import test5')
print('extend:',timer5.timeit(1000))

"""
append: 11.335934241
+: 14.140856151
tuidao::  6.254488888000001
list:: 4.430944866000001
extend: 17.001728899
"""
  • append 插入 队尾  时间短
  • insert 插入列头       时间长
  • li+=[i]   比  li=li+[i]  效率高很多,执行的步骤少

 

python中列表与字典操作的时间复杂度

 

数据结构的引入

程序=数据结构+算法

算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体

 

抽象数据类型(ADT)

指一个数学模型及定义在此数学模型上的一组操作

最常用的数据运算有五种:插入,删除,修改,查找,排序

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值