数据结构与算法- 第一讲

一. 算法的引入

算法其实就是解决问题的独立方法和思想

五大特性
  1. 输入: 可以0或者多个输入
  2. 输出: 至少一个或者多个输出
  3. 有穷性: 就是有限循环,不是无限循环
  4. 确定性: 就是唯一的,没有异议的
  5. 可行性: 代码每一行都可以执行

二. 算法效率衡量

我们知道仅仅靠时间来衡量效率是不对的, 因为代码所在的测试环境不一样, 比如i3 与i9的第机器执行同一个代码, 时间很明显不一样,还有受到数据规模的影响, 所以说,靠时间我们是无法确定代码效率的高低 , 所以我们有大O 复杂度表示法
在这里插入图片描述
第二次
在这里插入图片描述

大O表示法

通过这段代码执行时间的推导过程,我们可以得到一个非常重要的规律,那就是,所有代码的执行时间 T(n) 与每
行代码的执行次数 n 成正比。

T(n) = Of(n)

T(n) 表示执行代码的时间
f(n) 表示每行代码执行的次数
n 表示数据规模的大小
O表示正比
其实T(n)也不是真正的执行时间. 而是一种趋势而已

三. 时间复杂度分析

  1. 只关注循环次数最多的那段代码
def cal(n):
sum = 0
i = 1   #两个常量就是O(1)
for i in rang(n+1):  #这个是O(n)
	sum += i
	i+=1
return sum

其中第 2、3 行代码都是常量级的执行时间,与 n 的大小无关,所以对于复杂度并没有影响。循环执行次数最多的是第 4、5 行代码,所以这块代码要重点分析, 这两行代码被执行了 n 次,所以总的时间复杂度就是 O(n)。
2. 加法法则: 总时间复杂度等于 时间复杂度最大的那段代码

def cal(n):
sum = 0
i = 1
for in range(100):  #这里与n无关  , 所以是O(1)
sum += i
for i in rang(n+1):
sum += i
i+=1
for j in range(n+1):
	pass

综合这三段代码的时间复杂度,我们取其中最大的量级。所以,整段代码的时间复杂度就为 O(n^2)。也就是说:总的时间复杂度就等于量级最大的那段代码的时间复杂度

四. 常见时间复杂度

常见的复杂度并不多,从低阶到高阶有:O(1)、O(logn)、O(n)、O(nlogn)、O(n2)。
执行次数函数举例 阶 非正式术语
在这里插入图片描述

四. python内置的类型性能分析

timeit模块

  1. timeit模块可以用来测试一小段Python代码的执行速度
  2. class timeit.Timer(stmt=‘pass’, setup=‘pass’, timer=)
  3. Timer是测量小段代码执行速度的类。
  4. stmt参数是要测试的代码语句(statment);
  5. setup参数是运行代码时需要的设置;
  6. timer参数是一个定时器函数,与平台有关
  7. timeit.Timer.timeit(number=1000000)
  8. Timer类中测试语句执行速度的对象方法。number参数是测试代码时的测试次数,默认为1000000次。方法返回执行代码的平均耗时,一个float类型的秒数。
    在这里插入图片描述

五. 数据结构

  1. 算法与数据结构的区别
  2. 数据结构只是静态的描述了数据元素之间的关系。
  3. 高效的程序需要在数据结构的基础上设计和选择算法。
  4. 程序 = 数据结构 + 算法
  5. 总结:算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值