目录

  • 算法
  • 算法效率衡量
  • 时间复杂度和大O表示法
  • 时间复杂度计算原则和常见的时间复杂度
  • timeit模块
  • 利用timeit模块测试运行时间
  • list和dict内置操作的时间复杂度
  • 数据结构
  • 抽象数据类型(Abstract Data Type)


算法

1、告诉计算机确切的步骤来执行一个任务
2、算法是独立存在的解决问题的方法和思想
3、算法的五大特性
①输入:0个或多个
②输出:至少有一个
③有穷性:有限的步骤之内自动结束
④确定性:每一步都有确定的含义,不会出现二义性
⑤可行性

算法效率衡量

时间复杂度和大O表示法

时间复杂度T(n):程序中基本运算步骤的数量
大O表示法:忽略T(n)所有的常数,只留下最特征的部分,如n的三次方
最坏时间复杂度
1、最坏时间复杂度:提供了一种保证,是需要关注的
→算法完成工作最多需要多少基本操作
2、最优时间复杂度:价值不大,只是最理想的情况下,没有参考价值
→算法完成工作最少需要多少基本操作
3、平均时间复杂度
→算法完成工作平均需要多少基本操作

时间复杂度计算原则和常见的时间复杂度

时间复杂度的几条基本计算规则
①基本操作,即只有常数项、与n无关,认为其时间复杂度为O(1)
②顺序结构,时间复杂度按加法进行计算
③循环结构,时间复杂度按乘法进行计算
④分支结构,时间复杂度取最大值
⑤没有特殊说明,所分析的算法的时间复杂度都是最坏时间复杂度
⑥忽略所有常数项和次要项

常见的时间复杂度

python 现有的tea算法 python算法的五个特性_python

常见的时间复杂度之间的关系

python 现有的tea算法 python算法的五个特性_数据结构_02

timeit模块

1、timeit模块可以用来测试一小段Python代码的执行速度
2、语法格式:

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

Timer是测量小段代码执行速度的类。
stmt参数是要测试的代码语句(statment);
setup参数是运行代码时需要的设置;
timer参数是一个定时器函数,与平台有关。

利用timeit模块测试运行时间

# 测试关于列表的一些方法的运行时间
from timeit import Timer

def t1():
    li = []
    for i in range(10000):
        li.append(i)
def t2():
    li = []
    for i in range(10000):
        li = li +[i]
def t3():
    li = [i for i in range(10000)]
def t4():
    li =list(range(10000))
def t5():
    li = []
    for i in range(10000):
        li.extend([i])    #extend连接列表或可迭代对象

timer1 = Timer("t1()","from __main__ import t1")
print("append:",timer1.timeit(1000))
timer2 = Timer("t2()","from __main__ import t2")
print("+:",timer2.timeit(100))
timer3 = Timer("t3()","from __main__ import t3")
print("推导:",timer3.timeit(1000))
timer4 = Timer("t4()","from __main__ import t4")
print("list转换:",timer4.timeit(1000))
timer5 = Timer("t5()","from __main__ import t5")
print("extend:",timer5.timeit(1000))

运行结果为:
append: 0.9433054000000001
+: 17.1716935
推导: 0.47579999999999956
list转换: 0.2921438000000016
extend: 1.2958582000000014
# 测试在头部和尾部插入元素的时间
from timeit import Timer

def t6():
    li = []
    for i in range(10000):
        li.append(i)
def t7():
    li = []
    for i in range(10000):
        li.insert(0,i)
        
timer6 = Timer("t6()","from __main__ import t6")
print("append:",timer6.timeit(1000))
timer7 = Timer("t7()","from __main__ import t7")
print("insert:",timer7.timeit(1000))

运行结果为:
append: 0.8967233000000014
insert: 24.239545

list和dict内置操作的时间复杂度

python 现有的tea算法 python算法的五个特性_python 现有的tea算法_03


python 现有的tea算法 python算法的五个特性_python_04

数据结构

1、定义
Python中数据结构分为内置数据结构和扩展数据结构
常见的内置数据结构有列表、元组、字典等
常见的扩展数据结构有栈、队列等

2、数据结构和算法的关系
程序 = 数据结构 + 算法
即:算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体

抽象数据类型(Abstract Data Type)

1、含义
是指一个数学模型以及定义在此数学模型上的一组操作。即把数据类型和数据类型上的运算捆在一起,进行封装
2、引入这一概念的目的
把数据类型的表示和数据类型上运算的实现与这些数据类型和运算在程序中的引用隔开,使它们相互独立
3、最常用的数据运算
插入
删除
修改
查找
排序