文章目录

  • 一、时间复杂度
  • 1.时间复杂度的基本计算规则
  • 2.timeit模块
  • 3.内置操作的时间复杂度
  • 二、数据结构

a,b,c勾股定理算法(时间复杂度O(n^2)):

import time
start_time = time.time()
for a in range(0, 1001):
    for b in range(0, 1001):		#循环内层
        c = 1000-a-b				#这里的operator是 =
        if a**2+b**2 == c**2:       #注意operator是 ==,并且左右有空格
            print("a,b,c:%d,%d,%d" % (a, b, c))		# :%d” % () 取整数,并且括号里是表达式
end_time = time.time()
print("time:%d" %(end_time-start_time))

一、时间复杂度

时间复杂度:假设存在函数g,使得算法A处理规模为n的问题示例所用时间为T(n)=O(g(n))→渐进函数,那么则称O(g(n))是算法A的时间复杂度
最坏时间复杂度:算法完成工作最多需要多少基本操作
最优时间复杂度:算法完成工作最少需要多少基本操作
平均时间复杂度:算法完成工作平均需要多少基本操作

1.时间复杂度的基本计算规则

  1. 基本操作,即只有常数项,认为其时间复杂度只有O(1)
  2. 顺序结构,时间复杂度按加法进行计算
  3. 循环结构,时间复杂度按乘法进行计算
  4. 分支结构,时间复杂度取最大值
  5. 判断一个算法效率时,往往只需要关注操作数量的最高次项,常数项和次要项都可以忽略

python算法 wolf python算法详解_数据结构


python算法 wolf python算法详解_时间复杂度_02

2.timeit模块

timeit模块
用来测试python一小段代码的执行速度
class timeit.Timer(stmt=“pass”,setup=“pass”,time<= < timer fuction>)
Timer是执行小段代码执行速度的类。
stmt是要测试的代码语句(statement)
setup参数是运行代码所需要的设置;
timer参数是一个定时器函数,与平台有关

Timer.timeit(number=1000000)
Timer类中测试语句执行速度的对象方法。number参数是测试代码时的测试次数,默认为1000000.

from timeit import Timer  # 注意导入
def func01():
    li = []
    for i in range(10000):
        li.append(i)
def func02():
    li = []
    for i in range(10000):
        li += [i]      #相比于li=li+[i]有一定程度的优化
def func03():
    li = [i for i in range(10000)]
def func04():
    li = list(range(10000))
def func05():
    li = []
    for i in range(10000):
        li.extend([i])      # extend()加上的的是列表,在空间上有消耗
def func06():
    li = []
    for i in range(10000):
        li.insert(0, i)        # insert从头开始添加非常慢
# Timer()中含有的是字符串,""中是函数的完整性是,从模块中导入的是不含()的函数形式
timer1 = Timer("func01()","from __main__ import func01")
print("append:",timer1.timeit(1000))
timer2 = Timer("func02()","from __main__ import func02")
print("+:",timer2.timeit(1000))
timer3 = Timer("func03()","from __main__ import func03")
print("[]:",timer3.timeit(1000))
timer4 = Timer("func04()","from __main__ import func04")
print("list:",timer4.timeit(1000))
timer5 = Timer("func05()","from __main__ import func05")
print("extend:",timer5.timeit(1000))
timer6 = Timer("func06()","from __main__ import func06")
print("insert:",timer6.timeit(1000))

pop从头部取元素也比在尾部取元素要慢得多

3.内置操作的时间复杂度

python算法 wolf python算法详解_数据结构_03


index[]:指定一个位置并且把元素取出,这个过程通过一个步骤就能取出(区分与index(value)访问元素)

index assignment:进行赋值

pop():最坏情况是从头部去取,n代表列表的长度

del:代表一个个地清空

iteration:迭代

contain:需要遍历整个列表

slice():从x位置开始取,取到y,k代表x到y

set slice:重新排序并且还要再补充k数量的内容

concatenate:代表把两个列表加到一起,k是第二个列表中的元素

multiply:长度为n的列表被出现k次

python算法 wolf python算法详解_时间复杂度_04


delete item:删除一个键不需要遍历

二、数据结构

数据结构:一组数据的保存形式,例如:元组,列表,字典,集合
python的扩展数据结构:栈,队列等。

算法与数据结构的区别
程序 = 数据结构+算法
总结:算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体

抽象数据类型(abstract data type)
把其本身和支持的数据类型放在一起
最常见的数据运算:

  • 插入
  • 删除
  • 修改
  • 排序
  • 查找
class Stus(object):
    def adds(self):
    def sort: