本文中logn指的是log以2为底n的对数,本文中所有的log都是以2为底。
大O表示法
大O表示法,指出了最糟糕的情况下的运行时间;
算法的运行时间包括:最糟情况下的运行时间和平均情况下的运行时间。
假设列表有n个元素,遍历查找某个元素的位置,最多需要查询n次。使用大O表示法,这个运行时间为O(n)
使用二分查找法,最多只需要查询logn次,表示为O(log n)
常见大O运行时间
- O(log n) 对数时间:二分查找法等
- O(n) 线性时间:遍历查找
- O(n*log n) 快速排序等
- O(n^2) 选择排序等
- O(n!) 0.0
运行时间为O(n!)——著名的旅行商问题
有一位旅行商,需要前往5个城市,同时要确保旅程最短。。
如果你还记得排列组合的话,那真的是太棒了,如果你已经忘了,希望这可以帮你回忆起来:
5个城市总共有54321=120种方式。(排列)
当涉及6个城市的时候需要65…*.1= 720种,7个城市时有5040种;
当涉及n个城市时,需要执行n!(n的阶乘)次操作才能计算出结果。因此运行时间为O(n!),即阶乘时间。除非涉及的城市数很少,否则需要执行非常多的操作。如果涉及的城市数超过100,根本就不可能在合理的时间内计算出结果。
这种算法很糟糕。但是我们别无选择,这是计算机科学领域亟待解决的问题之一。面对这个问题,我们能做的只是去找出近似的答案,更详细的解释可以参考之后的文章。