大O表示时间复杂度(最差的情况)
一、时间复杂度
衡量一个算法的快慢,一定要考虑数据规模的大小。所谓数据规模,一般指输入的数字个数、输入中给出的图的点数与边数等等。一般来说,数据规模越大,算法的用时就越长。而在算法竞赛中,我们衡量一个算法的效率时,最重要的不是看它在某个数据规模下的用时,而是看它的用时随数据规模而增长的趋势,即时间复杂度。
T(n)=O(f(n))
O代表正比例关系;
n代表执行次数;
其他复杂度指标
big Omega:最好的情况
big theta:一个算法的区间
二、代码示例
1、示例1
for(int=i;i<=n;i++)
{
x++;
}
结果为:
O
(
1
+
3
N
)
=
O
(
N
)
O(1+3N)=O(N)
O(1+3N)=O(N)
N趋向于无限大,忽略常数和倍数
2、示例2
for(int=i;i<=n;i++)
{
for(int j;j<=n;j++){
x++;
}
}
结果为:
O
(
n
2
)
O(n^2)
O(n2)
3、示例3
for(int=i;i<=n;i++)
{
x++;
}
for(int=i;i<=n;i++)
{
for(int j;j<=n;j++){
x++;
}
}
结果为:
O
(
n
+
n
2
)
=
O
(
n
2
)
O(n+n^2)=O(n^2)
O(n+n2)=O(n2)
4、示例4
int i=1;
while(i<n){
i=i*2;
}
结果为:
O
(
l
o
g
N
)
O(logN)
O(logN)
2^k=n;
k=logN;
常见空间复杂度
示例一: O ( 1 ) O(1) O(1)
int x=0;
int y=0;
x++;
y++;
示例二:
O ( n ) O(n) O(n)
int[]newArray=new int[n];
for(int i=0;i<n;i++)
{
newArray[i]=i;
}