算法是解决问题的方法与步骤
在看一个算法是否优秀时,我们一般要考虑一个算法的时间复杂度
现在随着空间越来越大,时间复杂度成了一个算法的重要指标,那么如何估计一个算法的时间复杂度?
一、
常见的时间复杂度:O(1) O(logn) O(n) O(nlogn) O(n^2) O(2^n) O(n!)
二、
时间复杂度:分析算法的执行效率
1.
int fun(int n)
{
int n;
int j=3*n;
return i+j;
}
时间复杂度O(1)*******************************************************************************************该代码执行了一句话或一条语句,得出了一个固定常数。
2.
int fun(int n)
{
int i=1;
while(i<=n)
i=i*2;
return i;
}
时间复杂度为O(logn)**************************************************************************************
该代码主要部分是while循环,可以理解为n=2^x,x=log2n。
3.
int fun(int n)
{
int sum=0;
for(int i=0;i<n;i++)
sum+=i;
return sum;
}
时间复杂度为O(n)******************************************************************************************
该代码主要部分为for循环,循环内累加,执行了n次。
4.
int fun(int m,int n)
{
int sum=0;
for(int i=1;i<=m;i++)
sum+=i;
for(int i=2;i<=n;i++)
sum+=i;
return sum;
}
时间复杂度为O(m+n)**************************************************************************************
该代码主要部分为两个for循环,第一个for循环执行了m次,第二个for循环执行了n次。
5.
int fun(int m,int n)
{
int sum=0;
for(int i=0;i<m;i++)
{
for(int j-0;j<n;j++)
{
sum+=i*j;
j=j*2;
}
}
return sum;
}
时间复杂度为O(mlogn)************************************************************************************
改代码主要部分是两个for循环,第一个for循环执行了m次,第二个为x=log2n型。
6.
int fun(int n)
{
int sum=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
sum+=i*j;
}
}
return sum;
}
时间复杂度为O(n^2)***************************************************************************************
该代码主要部分为两个for循环,均执行了n次。
三、
常见的时间复杂度:O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(2^n)<O(n!)
通常情况下,竞赛环境中要求运行时间为1秒,计算机1秒可以执行的次数为10亿次。