算法分析

(中国大学MOOC 数据结构与算法(Python版)学习笔记“https://www.icourse163.org/course/PKU-1206307812”)

一. 什么是算法分析:

程序和算法的区别:

算法是对问题解决的分步描述
程序则是采用某种编程语言实现的算法,同一个算法通过不同的程序员采用不同的编程语言,能产生很多程序

算法分析主要就是从计算资源消耗的角度来评判和比较
算法更高效利用计算资源,或者更少占用计算资源的算法,就是好算法

计算资源指标:

一种是算法解决问题过程中需要的存储空间或内存,但存储空间受到问题自身数据规模的变化影响,要区分哪些存储空间是问题本身描述所需,哪些是算法占用,不容易。
另一种是算法的执行时间,我们可以对程序进行实际运行测试,获得真实的运行时间。
但关于运行时间的实际检测,和编程语言和运行环境都有点关系。同一个算法,采用不同的编程语言编写,放在不同的机器上运行,得到的运行时间会不一样,有时候会大不一样:比如把非迭代算法放在老旧机器上跑,甚至可能慢过新机器上的迭代算法。
所以我们需要更好的方法来衡量算法运行时间,并且这个指标与具体的机器、程序、运行时段都无关。

二. 大O表示法:

一个算法所实施的操作数量或步骤数可作为独立于具体程序/机器的度量指标,所以需要一种通用的基本操作来作为运行步骤的计量单位。
赋值语句就是一个合适的选择,一条赋值语句同时包含了(表达式)计算和(变量)存储两个基本资源。仔细观察程序设计语言特性,除了与计算资源无关的定义语句外,主要就是三种控制流语句和赋值语句,而控制流仅仅起了组织语句的作用,并不实施处理。
计算赋值语句的执行次数:
例如,对于一个求和的函数:

def Sum(n):
	theSum = 0
	for i in range(1, n+1):
		theSum = theSum + i
	return theSum

问题规模 n n n时,赋值语句的执行次数为: T ( n ) = 1 + n T(n)=1+n T(n)=1+n,问题规模影响算法执行时间。问题规模:影响算法执行时间的主要因素。在上述程序中,需要累计的整数个数合适作为问题规模的指标。
算法分析的目标是要找出问题规模会怎么影响一个算法的执行时间。
基本操作数量函数 T ( n ) T(n) T(n)的精确值并不是特别重要,重要的是 T ( n ) T(n) T(n)中起决定性因素的主导部分,用动态的眼光看,就是当问题规模增大的时候, T ( n ) T(n) T(n)中的一些部分会盖过其它部分的贡献。
数量级函数描述了 T ( n ) T(n) T(n)中随着n增加而增加速度最快的主导部分,称作“大O”表示法,记作 O ( f ( n ) ) O(f(n)) O(f(n)),其中 f ( n ) f(n) f(n)表示 T ( n ) T(n) T(n)中的主导部分。
确定运行时间数量级大O的方法:
例1: T ( n ) = 1 + n T(n)=1+n T(n)=1+n n n n增大时,常数1在最终结果中显得越来越无足轻重所以可以去掉1,保留n作为主要部分,运行时间数量级就是 O ( n ) O(n) O(n)
例2: T ( n ) = 5 n 2 + 27 n + 1005 T(n)=5n2+27n+1005 T(n)=5n2+27n+1005 n n n很小时,常数1005其决定性作用但当 n n n越来越大, n 2 n2 n2项就越来越重要,其它两项对结果的影响则越来越小同样, n 2 n2 n2项中的系数5,对于 n 2 n2 n2的增长速度来说也影响不大所以可以在数量级中去掉 27 n + 1005 27n+1005 27n+1005,以及系数5的部分,确定为 O ( n 2 ) O(n2) O(n2)

常见的大O数量级函数:
在这里插入图片描述
其它算法复杂度表示法:
大O表示法:表示了所有上限中最小的那个上限。
大𝛀表示法:表示了所有下限中最大的那个下限。
大𝚹表示法:如果上下限相同,那么就可以用大𝚹表示

三. Python数据类型的性能

Python官方的算法复杂度网站:https://wiki.python.org/moin/TimeComplexity

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值