python笔记-算法及数据结构1

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

2 算法5大特性

    2.1 输入(具有0个或多个)

    2.2 输出(具有1个或多个输出)

    2.3 有穷性(有限步骤可以处理,每个步骤可以在有限时间内处理)

    2.4 确切性(算法中每一步都有确切的含义,没有二义性)

    2.5 可行性(算法中每一步都是可行的,都能够执行有限次数完成)

3 大O计法

    对于算法的时间性质和空间性质,最重要的是其数量级和趋势,这些事分析算法效率的主要部分,而计量算法基本操作数量的规模函数中的常量因子可以忽略不计。

    假设存在函数g,使得算法A处理规模为n的问题示例所用时间为T(n)=O(g(n)),则称O(g(n))为算法A的渐进时间复杂度。

4 时间复杂度的几个概念

    最优时间复杂度:算法完成工作最少需要多少基本操作

    最坏时间复杂度:算法完成工作最多需要多少基本操作

    平均时间复杂度:算法完成工作平均需要多少基本操作

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

①    基本操作,即只有常数项,认为其时间复杂度为O(1)

②    顺序结构,时间复杂度按加法进行计算

③    循环结构,时间复杂度按乘法进行计算

④    分支结构,时间复杂度取最大值

⑤    判断一个算法效率时,往往只关注操作数量的最高次项,其它次要项和常数项可以忽略

⑥   在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度

6 常见时间复杂度时间排序

    O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)

7 代码时间计算模块timeit

    timeit模块用于测算代码执行时间,基本格式为:

    timeit.Timer(‘程序段’,’路径’)

    示例:

    导入模块

    

import timeit

    定义要测算的代码块

    

def add():

        w=0

        for t in range(100):

             w+=t

        return w

    计算代码块执行需要的时间

    

t=timeit.Timer(‘add()’,’from __main__ import add’)

t1=t.timeit(number=1000)

8 python内置类型性能分析

    8.1 列表

类型

时间复杂度

类型

时间复杂度

类型

时间复杂度

index[]

O(1)

del operator

O(n)

reverse

O(n)

indexassignment

O(1)

iteration

O(n)

concatenate

O(k)

append

O(1)

contains(in)

O(n)

sort

O(nlogn)

pop()

O(1)

get slice[x:y]

O(k)

multiply

O(nk)

pop(i)

O(n)

del slice

O(n)

insert(i,item)

O(n)

set slice

O(n+k)

        8.2 字典表

类型

时间复杂度

类型

时间复杂度

类型

时间复杂度

copy

O(n)

get item

O(1)

set item

O(1)

delete item

O(1)

contains(in)

O(1)

iteration

O(n)

9 数据结构

    9.1 基本概念

    数据结构:数据的组织方式

内置数据结构:python自身定义好的数据结构

扩展数据结构:使用过程中我们自己定义的数据结构

程序=数据结构+算法

    抽象数据类型:把基础数据和其支持的操作放在一起形成一个整体,即把数据类型和数据类型的上的操作捆在一起,进行封装。

猜你喜欢

转载自www.cnblogs.com/zhuome/p/11404073.html