算法的运行时间
运行时间增速
不同算法随规模的增大而增大的速度不同
我们需要比较不同算法的运行时间的增速
大O表示法【类比数据结构中的时间复杂度】
比较操作数【其体现了算法运行时间的增速】
这种表示法体现了算法在最糟情况下的运行时间
【这不就是时间复杂度吗】
在不同算法比较时可以看出量级的差异,以选择不同的算法,但是针对一个算法求出增速或许可以根据其增速特性,添加不同的操作
常见的算法增速
O(log n),也叫对数时间,这样的算法包括二分查找。
O(n),也叫线性时间,这样的算法包括简单查找。
O(n * log n),一种速度较快的排序算法。
O(n2),一种速度较慢的排序算法。
O(n!),一种非常慢的算法
旅行者问题
一个旅行者要前往5个城市
5个城市并不在一条直线上
旅行者要规划一下路线,保证总路程最短
那么总共有5*4*3*2*1种方案
他需要将所有方案列出来,并且计算出每种方案所需的路程
那么需要计算120次
如果他要去往6个城市,就需要计算6*5*4*3*2*1次
如果他要去往n个城市,就需要计算n!次
如果他有100年的时间大约3153600000秒,每一秒可以计算出一种方案的结果,那么他只能计算出去12个城市的所有方案(479001600),而如果是13个城市(6227020800)的话,那他就别想算出来了
这种问题的时间复杂度就是O(n!)
So,有没有更好的算法?