对于时间复杂度,通常用O表示
在推导大O介时:
1.用常数1来取代运行时间中的加法运算
2.在最后的运行函数中只保留最高级
3.如果最高阶项存在且不为1,则舍去该项的常数
几种类型的时间复杂度
常数阶
a=a+1;
a=a+1;
a=a+1;
用常数1来取代运行时间中的加法运算即O(1)。
线性阶
for(int i=1;i<n;i++)
{...}
时间复杂程度为O(n)。
如果为双层n循环,最高阶项存在且不为1,则舍去该项的常数2,复杂程度为O(n).
对数阶
a=1;
while(a<n)
{a=a*2}
循环结束标志相当于求2^x<n;求对数即时间复杂度为O(logn).
平方阶
for(int i=1;i<n;i++)
{for(int j=1;j<n;j++)
...
}
此时程序就运行n*n次,时间复杂度为O(n^2).
根号阶
for(int i=1;i<sqrt(n);i++)
{....}
i=n -1;时间复杂度为O(n)。
常见复杂度从低阶到高阶有
O(1)<O(logn)<O(n)<O(n^2).