0
点赞
收藏
分享

微信扫一扫

一眼望穿算法复杂度?“大O表示法”带你涨姿势


无论我们看别人的代码,还是自己写代码,都需要评估算法复杂度,以此达到对算法更好的理解

那么如何评估一个算法的性能?

我们用大O表示法来评估一个算法的复杂度。
算法复杂度分为时间复杂度和空间复杂度。我们通常会牺牲空间复杂度来降低时间复杂度。所以这里我们只讨论时间复杂度。

什么是大O表示法?

时间复杂度是对一个算法运行时间长短量度,用大O表示,记作T(n)=O(f(n)).

例如一个程序执行f(n)=n次,那么用大O表示,即为O(n)。

一个程序执行f(n)=2n次,那么用大O表示,仍为O(n),忽略掉常数2,因为n和2n是同一级别的。

一个程序执行f(n)=n2+n次,那么用大O表示,即为为O(n2),忽略掉n,因为n比n2的级别低,可以忽略。

常见的时间复杂度按照从低到高的顺序,包括O(1),O(log n),O(n),O(nlog n),O(n2)

我们看代码来实践下,判断算法复杂度。

一眼望穿算法复杂度?“大O表示法”带你涨姿势_时间复杂度


在上图中,我们看到,一共执行了n次,那么时间复杂度为O(n)。

一眼望穿算法复杂度?“大O表示法”带你涨姿势_空间复杂度_02


在上图中,我们看到,一共执行了n*n次,那么时间复杂度为O(n2)。

一眼望穿算法复杂度?“大O表示法”带你涨姿势_算法_03


仔细看,第一轮执行1次,第二轮执行2次,……第n轮执行n次,则总共执行(n2+n)/2次,那么就是O(n2)次。

接下来看一道难题

一眼望穿算法复杂度?“大O表示法”带你涨姿势_算法_04


你看,用了while循环,而循环条件是count<n,每次执行后count都会是原来的两倍,那么这个程序会执行多少次呢?

我们假设执行k次,则有2k=n,解得k=log2 n,则该程序执行log2 n次,则时间复杂度为O(log2 n).

各位看官,看了本文中颇有收益的话,麻烦点个赞,评论下哦,爱你。


举报

相关推荐

0 条评论