算法:1. 算法复杂度
定义:
算法复杂度反映的是算法最糟糕情况下的运行时间,一般使用O( f(n) )表示。
释义:
将需要解决的问题比作一段路程,算法就是交通工具,而算法复杂度就是交通工具的速度。
常见的算法复杂度:
表1 常见算法复杂度
算法名称 |
算法复杂度 |
二分法 |
O(log n) |
依次查找 |
O(n) |
快速查找 |
O(n*log n) |
选择排序 |
O(n^2) |
旅行商解决方案 |
O(n!) |
说明:
在表1中的算法复杂度一栏,O( f(n) )中的 f(n) 越大,则表示“交通工具的速度”越慢,即算法的速度越慢。
举例:
1. 二分法:
在0~100中找出20。
第1步:找50,判断为大;
第2步:找25,判断为大;
第3步:找12,判断为大;
第4步:找18,判断为小;
第5步:找21,判断为大;
第6步:找20,查找成功。
使用6步查找完成,而且发现之后需要查找的结果变少。可以得到曲线图:
图1 二分法查找操作数和剩余需要查找的结果示意图
需要注意的是,这里查找的结果变少可以理解为经过“交通工具”一段时间行驶后,剩余的“路程”变短的速度加快。
2. 依次查找:
第1步,查找0,未找到;
第2步,查找1,未找到;
......
第21步,查找20,找到。
对比二分法查找和依次查找可以发现,虽然需要查找的结果都是在变小,但是二分法查找的结果排除速度快于依次查找。二分法每次都可以将一半的结果排除,而依次查找每次却只能排除1个,而且从开始到结束,速度没有变化。
参考资料:
Aditya Bhargava 著, 袁国忠译. 《算法图解》,人民邮电出版社,2020年.
我们的公众号:认知无线电
我们的网站:www.lolplayer.club
欢迎关注和指正