Python数据结构与算法(一)---概念

文章目录

  • Python数据结构与算法(一)
    • 一、算法的引入
    • 二、时间复杂度与大O表示法
      • (一)、算法的概念![在这里插入图片描述](https://img-blog.csdnimg.cn/20191002093235628.png)
      • (二)、算法的五大特性
      • (三)、算法效率衡量
        • (1)时间复杂度与大O记法
        • (2)如何理解“大O记法”
    • 三、最坏时间复杂度与计算规则
      • (一)最坏时间复杂度
      • (二)时间复杂度的几条基本计算规则
    • 四、常见时间复杂度与大小关系
      • (一) 常见时间复杂度
      • (二) 常见时间复杂度之间的关系
    • 五、代码执行时间测量模块timeit-python内置类型性能分析
      • timeit模块
    • 六、Python列表类型不同操作的时间效率
      • (一)列表操作测试
      • (二)pop操作测试
    • 七、Python列表与字典操作的时间复杂度
      • (一)list内置操作的时间复杂度
      • (二)dict内置操作的时间复杂度
    • 八、数据结构引入
      • (一)概念
      • (二)算法与数据结构的区别
      • (三)抽象数据类型(Abstract Data Type)

Python数据结构与算法(一)

一、算法的引入

在这里插入图片描述
方法一:
Python数据结构与算法(一)---概念_第1张图片
代码:

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("times:%d" % (end_time-start_time))
print("finished")

运行结果:
Python数据结构与算法(一)---概念_第2张图片
方法二:
在这里插入图片描述

import time

start_time = time.time()
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,b,c:%d, %d, %d"%(a,b,c))
end_time = time.time()
print("times:%d" % (end_time-start_time))
print("finished")

运行结果:Python数据结构与算法(一)---概念_第3张图片

二、时间复杂度与大O表示法

(一)、算法的概念Python数据结构与算法(一)---概念_第4张图片

(二)、算法的五大特性

Python数据结构与算法(一)---概念_第5张图片

(三)、算法效率衡量

(1)时间复杂度与大O记法

Python数据结构与算法(一)---概念_第6张图片

(2)如何理解“大O记法”

在这里插入图片描述

三、最坏时间复杂度与计算规则

(一)最坏时间复杂度

Python数据结构与算法(一)---概念_第7张图片

(二)时间复杂度的几条基本计算规则

Python数据结构与算法(一)---概念_第8张图片

四、常见时间复杂度与大小关系

(一) 常见时间复杂度

Python数据结构与算法(一)---概念_第9张图片

(二) 常见时间复杂度之间的关系

Python数据结构与算法(一)---概念_第10张图片
注:黄色的是n^3.

五、代码执行时间测量模块timeit-python内置类型性能分析

timeit模块

Python数据结构与算法(一)---概念_第11张图片
pass是一个字符串,需要将结果放在字符串中。

六、Python列表类型不同操作的时间效率

(一)列表操作测试

from timeit import  Timer
# li1 = [1,2]
# li2 = [23,5]
# li = li1 +li2 #加操作
# li = [i for i in range(10000)] #列表生成器
# li = list(range(10000))       #把可迭代的对象直接转化成列表
def t1():
    li = []                       #在空列表中进行追加
    for i in range(10000):
        li.append(i)

def t2():
    li = []
    for i in range(10000):
        li += [i]

def t3():
    li = [i for i in range(10000)]

def t4():
    li = list(range(10000))

timer1 = Timer("t1()","from __main__ import t1")
print("append:",timer1.timeit(1000))

timer2 = Timer("t2()","from __main__ import t2")
print("+:",timer2.timeit(1000))

timer3 = Timer("t3()","from __main__ import t3")
print("[i for i in range]:",timer3.timeit(1000))

timer4 = Timer("t4()","from __main__ import t4")
print("list(range()):",timer4.timeit(1000))

运行结果:
Python数据结构与算法(一)---概念_第12张图片

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("list(range()):",timer6.timeit(1000))

timer7 = Timer("t7()","from __main__ import t7")
print("list(range()):",timer7.timeit(1000))

运行结果:
Python数据结构与算法(一)---概念_第13张图片

(二)pop操作测试

Python数据结构与算法(一)---概念_第14张图片

七、Python列表与字典操作的时间复杂度

(一)list内置操作的时间复杂度

Python数据结构与算法(一)---概念_第15张图片
依次操作:取值,赋值,尾部追加,尾部弹出值,指定位置弹出值,指定位置插入,删除整个列表,迭代,s使用in操作符判断参数是否在这个列表中,取切片(只和距离有关系),删除切片,设置切片,逆置列表,两个列表加在一起,排序,列表的每一个元素乘以一个固定实数。

(二)dict内置操作的时间复杂度

Python数据结构与算法(一)---概念_第16张图片
依次操作:复制字典表,取值,设置值,删除,检查值是否存在(字典不需要遍历),迭代

八、数据结构引入

(一)概念

 解决的是数据如何保存的问题

Python数据结构与算法(一)---概念_第17张图片

(二)算法与数据结构的区别

Python数据结构与算法(一)---概念_第18张图片

(三)抽象数据类型(Abstract Data Type)

Python数据结构与算法(一)---概念_第19张图片

    注:定义出数据类型支持的操作接口。

Python数据结构与算法(一)---概念_第20张图片

你可能感兴趣的:(python)