算法 - 时间复杂度
O(1) 常数阶
#include <stdio.h>
#include <string.h>
int main( )
{
int i,sum = 0,n =100000000000;
sum = (1 + n) * (n /2);
printf("%d",sum);
return 0;
}
执行次数不随n的变化而变化。
O(n) 线性阶
#include <stdio.h>
#include <string.h>
int main( )
{
int i,sum = 0,n =100000000000;
for (i = 1;i<=n;i++) {
sum = sum + i;
}
printf("%d",sum);
return 0;
}
执行次数随n增加而线性增加。
O(n^2) 平方阶
#include <stdio.h>
#include <string.h>
int main( )
{
int i,j,sum = 0,n =10;
for (i = 1;i<=n;i++) {
for (j = 1 ;j<n;j++) {
printf("i like u!\n");
}
}
return 0;
}
O(logN) 对数阶
#include <stdio.h>
#include <string.h>
int main( )
{
int i =1,n = 32;
int count = 0;
while ( i < n ) {
i = i * 2; // O(log2n)
count ++ ;
}
printf("执行的次数为%d\n",count);
return 0;
}
#include <stdio.h>
#include <string.h>
int main( )
{
int i =1,n = 243;
int count = 0;
while ( i < n ) {
i = i * 3; //O(log3n)
count ++ ;
}
printf("执行的次数为%d\n",count);
return 0;
}
听,实践,思考,举一反三,多应用,真正的掌握,从书面升华为技能。--小甲鱼
O(2^n) 指数阶,最可怕
#include <stdio.h>
#include <string.h>
#include<math.h>
int main( )
{
int i =0,n = 25;
int count = 0;
while ( i < pow(2,n) ) {
i++;
count ++ ;
}
printf("执行的次数为%d\n",count);
return 0;
}
很可怕,n到25的时候需要2秒钟,变成26之后,就等不完了。
正常情况下,不会有O(n3)、O(2n)、O(n!)、O(n^n),谁用谁傻逼。