算法第一天


在这里插入图片描述

程序 = 数据结构 + 算法

算法:解决问题的一种思路

数据结构:数据在计算机中存储的方式。

抽象数据类型(ADT,abstract data type):将数据类型和数据类型上的运算进行封装。
运算:增删改查,排序

算法的五大特性:

输入 :0或多个输入
输出 :至少一个输出
有穷性 :有限步后自动结束,每步都在可接受的时间内完成
确定性 :每一步都有确定的含义,无二义性
可行性 :每一步都是有穷的,即每一步都能在执行有限次后完成。

时间复杂度:

引入:由于运行平台的多样性,以程序的执行时间来衡量算法的效率不一定是客观准确的。于是以计算机执行的每一个基本操作作为衡量算法效率的时间单位。有多少基本操作就有代表会花费多少时间。

渐进函数:

n:表示输入的规模。
f(n):表示算法的具体的时间复杂度函数
g(n) : 当 n 趋于无穷时,f(n)中的低次项和最高次项的常数系数变得不再重要,只保留系数为1的最高次项,这就是g(n)
O(g(n)):算法的渐进时间复杂度,简称时间复杂度,计作T(n)

分析算法时可能需要考虑:

最优时间复杂度:算法执行最乐观的情况,基本无参考价值。
最坏时间复杂度:算法执行的一种保证,若无特别说明,时间复杂度就是指最坏时间复杂度。
平均时间复杂度:对算法的全面评价,反映算法的性质。但因为平均情况难以计算,这种衡量没有保证。

计算规则:

1.基本操作 : 计作O(1),即常数级。
2.顺序结构:按加法进行计算。
3.分支结构:取最大值。
4.循环结构:按乘法进行计算。
5.进行完上述操作,可以得出f(n),忽略低次项和常数之后得到g(n)。
6.无特殊说明时,按最坏的情况进行计算。

时间复杂度之间的关系:

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

Python内置性能分析模块 timeit

from timeit import Timer

使用:
实例化Timer对象,传入两个字符串:要测试的函数名字符串和函数导入命令字符串
实例调用Timer类的timeit()方法。传入一个参数,表示测试次数。

from timeit import Timer

def test1():
    pass

t1 = Timer("test1()", "from __main__ import test1")
t1.timer(10000) #测试10000次。

list 的操作测试:

列表创建:
append():相对最慢。
list() :最快。
推导:[ for if],居中,但是操作最灵活。

列表扩展:
+:最低效,返回扩展后的结果,不是自操作,列表本身不变。
+= :自增操作符最高效
extend() :自扩展

列表从头部插入和从尾部追加,哪个快?
appendinsert(0,)快得多。

list 内置操作的时间复杂度:

在这里插入图片描述

dict 内置操作的时间复杂度:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值