Python数据结构1:算法复杂度做算法分析:大O表示算法

1. 评价算法标题好坏的指标

1.1 计算资源指标

1.1.1 存储空间或内存

由于不好区分是数据本来就需要很大的空间,还是由于算法太垃圾占用了太多的空间。所以通常不用这个描述

1.1.2 算法执行时间

通常用这个描述计算资源指标
在python中可以用time模块统计运行时间。
time.time()是系统的时间。

import time
start = time.time()
需要执行的程序
end = time.time()
print(end - start)

end - start 就是程序运行的时间。通常我们执行多次程序,避免单次执行程序的偏差。

2. 迭代算法和非迭代算法的对比

2.1 迭代算法

迭代算法就是说下一次的结果是基于上一次来的,一般会有个循环
迭代的累加求和算法

import time
def sumOfN(n):
	start = time.time()
	theSum = 0
	for i in range(1, n + 1):
		theSum = theSum + i
	end = time.time()
	return theSum, end - start
print(sumOfN(10000000)) # 求 1-10000000的累加和并计算这个程序的运行时间

2.2 非迭代算法

非迭代算法直接一步到位计算,不需要循环

import time
def sumOfN(n):
	start = time.time()
	theSum = 0.5 * n * (n + 1)
	end = time.time()
	return theSum, end - start
print(sumOfN(10000000)) # 求 1-10000000的累加和并计算这个程序的运行时间

2.3 同一问题迭代和非迭代的对比

上面的第二个程序比第一个程序运行快太多了。所以第二种比较好,但是第二个公式可能比较难想出来。

3. 用执行时间衡量算法好坏的问题

不同的编程语言、平台、机器,跑同一算法的时间有很大区别。因此只用执行时间,是有失偏颇的。我们需要一种更好的方法(与具体的机器、程序、运行时段等都无关的方法)来评价算法的好坏。

4. 大O表示法: 算法复杂度

4.1 赋值语句的个数衡量算法

赋值语句如下:

a = b

表示把b的值赋给a,这个过程既包括计算又包括存储。
赋值语句是一个合适的算法度量指标,他在所有的平台上都是一样的。赋值语句多,执行时间长,反之短 。

对于上述的 s u m O f N ( n ) sumOfN(n) sumOfN(n)函数

# import time #1
def sumOfN(n): #2
	# start = time.time() #3
	theSum = 0 #4 执行一次
	for i in range(1, n + 1): #5
		theSum = theSum + i #6 执行n次
	# end = time.time() #7
	return theSum # end - start #8
print(sumOfN(10000000)) # 求 1-10000000的累加和并计算这个程序的运行时间 #9

n是问题规模,第 4,6行是赋值语句
因此 s u m O f N ( n ) sumOfN(n) sumOfN(n)的赋值语句数量是 T ( n ) = n + 1 T(n) =n+1 T(n)=n+1

4.2 问题规模

问题规模是影响算法执行时间的主要因素。对上述得累计求和算法,需要求和的n的个数就是问题规模
如,求1000个整数的累计和比1000000个整数的累计和,是同一问题的小规模。
算法分析就是要找出问题规模怎么影响算法的执行时间

4.3 数量级函数

T ( n ) T(n) T(n)的精确值不重要,他的主导部分最重要,如 T ( n ) = n + 1 T(n) = n + 1 T(n)=n+1,n很大时,1就对算法的影响就忽略不计了。

大O表示法:数量级函数就是只取 T ( n ) T(n) T(n)中关于n的部分,记作 O ( f ( n ) ) O(f(n)) O(f(n)) f ( n ) f(n) f(n) T ( n ) T(n) T(n)中关于 n n n的部分


T ( n ) = n + 1 T(n) = n + 1 T(n)=n+1 O ( n ) O(n) O(n)
T ( n ) = 5 n 2 + 27 n + 1 T(n) = 5n^2 + 27n + 1 T(n)=5n2+27n+1 O ( n 2 ) O(n^2) O(n2)

4.4 影响算法执行时间的其他因素

有时不仅问题规模决定运行时间,一些具体的数据也可能会影响算法运行时间
如排序问题中,有的数据集已经只有个别的数没排好顺序,有的数据集有特别的多的数没排好顺序。
这时我们将各个数据集的情况求平均,用平均体现算法性能。

4.5 最常见的7种大O数量级函数

4.5 小练习

求这段代码的复杂度

解:
赋值语句包括四部分
T ( n ) = 3 + 3 n 2 + 2 n + 1 − > O ( n 2 ) T(n) = 3 + 3n^2 + 2n + 1 -> O(n^2) T(n)=3+3n2+2n+1>O(n2)

参考文献

本文的知识来源于B站视频 【慕课+课堂实录】数据结构与算法Python版-北京大学-陈斌-字幕校对-【完结!】,是对陈斌老师课程的复习总结。

CAN长字节DM1报文是指在CAN总线上传输的长度超过8个字节的DM1报文。根据引用\[1\],当要传输的数据长度超过8个字节时,首先使用TPCM进行广播,广播内容包含即将传输报文的PGN、总的数据包长度等信息,然后使用TP.DT进行数据传输。相邻两个TP.DT之间的时间间隔是50ms到200ms。根据引用\[2\],当字节数大于8时,将会使用多帧传输参数组。根据引用\[3\],DM1报文是Diagnostic Message 1, Active Diagnostic Trouble Codes的缩写,用于点亮故障指示灯、红色停机灯等,并周期性播报控制器中处于激活状态的故障码。DM1报文的格式包括各个字节的定义,如故障指示灯、红色停机灯、琥珀色警告指示灯等。因此,CAN长字节DM1报文是指在CAN总线上传输的长度超过8个字节的DM1报文,用于传输更多的故障码信息。 #### 引用[.reference_title] - *1* [车载通信——J1939 DM1](https://blog.csdn.net/weixin_64064747/article/details/130193432)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [J1939广播DM1报文](https://blog.csdn.net/mengdeguodu_/article/details/108173263)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [J1939商用车在线诊断DM1报文](https://blog.csdn.net/traveller93/article/details/120735912)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值