时间复杂度与空间复杂度的分析:
时间复杂度:
if ( A > B )
{
for ( i=0; i<N; i++ )
for ( j=N*N; j>i; j-- )
A += B;
}
else {
for ( i=0; i<N*2; i++ )
for ( j=N*2; j>i; j-- )
A += B;
}
if内的循环体时间复杂度为:N^3;
else内循环体时间复杂度为: N^2;
浙大数据结构陈越老师的分而治之的思想求解最大子列和的问题:
时间复杂度:
求解时间复杂度要用到递归的思想:
T(n) = 2 T(n / 2 ) + c*n; 将T(n / 2 ) 继续往下换:
T(n) = 2( 2 T(n / 2^2) + c*n/2) + c*n = 2^2T(n / 2^2) + c*2*n;
则归纳推理可知,当n / 2^k = 1 时,
T(n) = 2^k T(1) + c*k*n, 其中2^k = n ,得k = (log2 n);
则最终:
T(n) = n + c*(log2 n)*n = n*log n;
空间复杂度:
每次对该数据两边进行一次递归,都会把数据分成2半,知道每组数据都是1个则停止递归。可知递归k次将n个数据彻底分解。则有k = log n;则调用了k次 “分”函数 , 则递归的空间复杂度为O(log n);
递归的最后结果是n个数据都被单独的函数调用了1次,可知函数调用了n次,则可知这个算法的整体的空间复杂度是S(n + log n) = S(n);