算法简介

程序和算法的时间复杂度

1.一个程序或算法的时间效率,也称“时间复杂度”,有时简称“复杂度”
2.复杂度常用大写字母O和小写字母n来表示,比如O(n),O(n²)等,n代表问题的规模
3.时间复杂度是用算法运行过程中,某种时间固定的操作需要被执行的次数和n的关系来度量的,在无序数列中查找某个数,复杂度是O(n)
4.计算复杂度的时候,只统计执行次数最多的(n足够大时)那种固定操作的次数,比如某个算法需要执行加法n²次,除法n次,那么就记其复杂度是O(n²)
5.复杂度有“平均复杂度”和“最坏复杂度”两种,两者可能一致,也可能不一致

例如:顺序查找,平均复杂度为n/2,最坏复杂度为n,复杂度都为O(n),注意这里不计系数
快速排序,平均复杂度n*log n,最坏复杂度为n²

6.如果复杂度是多个n函数的和,只关心随n增长增长速度最快的那个函数
7.常见的大O运行时间

O(log n),对数级,包括二分查找
O(n),线性级,包括简单查找即顺序查找
O(n*log n),线性对数级,快速排序
O(n²),平方级,选择排序,冒泡排序,插入排序
O(nª),多项式级,基于n的a层循环
O(n!),阶乘级,旅行商问题

二分查找

例:
A有一个1~100的数,B来猜,可以提问,A只能回答对和错,要以最少次数猜到这个数字

1.是1吗?是2吗?。。。是99吗?平均要问50次
2.大于50吗?大于75吗?。。。每次缩小范围到一半,7次以内就能猜到

此时二分查找的简单程度显而易见
简单查找时间复杂度为O(n),二分查找时间复杂度为O(log n)
但请注意,二分查找前提条件是查找的数列必须是有序的
下面来写一个程序描述上述过程:

最后提一下旅行商问题

大概就是一个旅行商需要前往5个城市,同时要确保旅程最短
为此,可以考虑前往这些城市的各种可能性
对于每种顺序,他都计算总旅程,再挑选出旅程最短的线路
显然,5个城市有5!=120种不同的排列方式
推而广之,n个城市需要执行n!次操作才能计算出结果
因此运行时间为O(n!),这种算法时间复杂度非常糟糕

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容