时间的复杂性
1 .时间频率
执行一个算法的时间
2 .时间的复杂性
n被称为事件规模,当n不断变化时,时间频率t(n )也不断变化。 这个变化规律称为时间复杂度。 一般来说,算法中基本操作的重复执行次数是具有问题规模n的函数,如果具有某个辅助函数f(n ),则表示存在总是fn*c=T(n ) n )成立的正常数c ) n。 标记为t(n )=o ) f(n ) ),将o ) f ) n )称为算法的渐进的时间复杂度,简称为时间复杂度。
空间复杂性
Space Complexity测量的是一种算法在运行时临时占用存储容量的大小
复杂度分析
通常,一个算法的复杂度由其输入量决定,复杂度随着输入的增加而变化。 为了降低算法的复杂度,也需要考虑输入量来设计好的算法
实际计算算法的复杂性(以时间为基准)
删除影响小的常数相
o (一) )。
国际货币基金组织
printf (问候,世界! n ';//需要执行一次
返回0;//需要执行一次
}
//t(n )=2表示复杂度为o ) )1)
o(n ) )。
国际货币基金组织
for (英制=0; in; I ()//执行) n 1)次需要
printf (问候,世界! n '; 需要执行//n次
}
返回0;//需要执行一次
}
如果//t(n )=n ) n1),则o ) ) ) )。
o(n (二) ) ) )。
voidafunc (国际) {
//第一部分的时间复杂度为o(n^2) () ) ) () ) ) ) ) ) ) ) ) ) )。
for (英制=0; i n; I ) {2}
for(intj=0; j-n; j ) {2}
printf (问候,世界! n ';
}
}
//第二部分的时间复杂度为o(n )
for(intj=0; j-n; j ) {2}
printf (问候,世界! n ';
}
}
//t(n )=nn* ) n1) n )如果是n1),则为o(n^2) ) ) ) ) ) ) ) ) ) ) ) ) )。
包含判断的算法
voidafunc (国际) {
if(n=0) {
//最初路径的时间复杂度为o(n^2)
for (英制=0; i n; I ) {2}
for(intj=0; j-n; j ) {2}
printf (输入数据为零以上n );
}
}
} else {
//第二个通路的时间复杂度为o(n )
for(intj=0; j-n; j ) {2}
printf (输入数据小于零(n );
}
}
}
//O(N )2)和o ) n )选择最大的o ) n )2)
o (罗格(n ) () () ) () ) () ) () ) ) ) ) ) ) ) )。
voidafunc (国际) {
for (英制=2; i n; I ) {2}
i *=2; //执行次数t^2=n; 执行次数t=log(2) ) n ) )。
printf(%I(n ),I );
}
}
如果t(t )=log(2)2) ) n )=log(2)2n ),则为o ) log(n ) )
o(2^n ) ) ) )。
longa func (国际) {
if(n=1) {
返回1;
} else {
电子货币(n-1 )基金(n-2 );
}
}
//t(n )=t ) n-1 ) t ) n-2 )可以通过归纳证明法证明为: n=1时为t(n ) )5/3) ) n,同时n 4时为t ) n=)3/2) ) n