相信大家对于算法的时间复杂度O都不会陌生,不过你知道一个算法的时间复杂度是如何计算出来的吗?
以前在学习算法和数据结构的时候,对于每种算法的复杂度都是死记的并没有真正的去研究他们是如何计算出来,最近突然对算法产生了兴趣,迫使自己研究了一下算法复杂度的计算方法。
概念
大O表示法表示时间复杂性,注意它是某一个算法的时间复杂性。大O表示只是说有上界,由定义如果f(n)=O(n),那显然成立f(n)=O(n^2),它给你一个上界,但并不是上确界,但人们在表示的时候一般都习惯表示前者。
另外除了这个官方概念,个人认为大O表示的是问题规模n和算法中语句执行次数的关系。
以二分查找为例,我们求解它的时间复杂度
1 设规模为n个元素时,要执行T(n)次
T(n)=T(n/2)+1
T(n)=[T(n/4)+1]+1
…
T(n)=T(n/2^m)+m
当n=2^m
T(n)=T(1)+log2n
T(1)=1
所以其算法复杂度为O(log2n)