解决问题方法的效率,跟数据的组织方式有关
解决问题方法的效率,跟空间的利用效率有关
解决问题方法的效率,跟算法的巧妙程度有关
只描述数据对象集和相关操作集“ 是什么”,并不涉及 “ 如何做到”的问题
类型名称: 矩阵(Matrix )
数据对象集:一个M×N的矩阵A[M×N]=(aij)
操作集
空间复杂度S(n)
根据算法写成的程序在执行时占用存储单元的长度。这个长度往往与输入数据的规模有关。空间复杂度过高的算法可能导致使用的内存超限,造成程序非正常中断。
时间复杂度T(n)
根据算法写成的程序在执行时耗费时间的长度。这个长度往往也与输入数据的规模有关。时间复杂度过高的低效算法可能导致我们在有生之年都等不到运行结果。
场景:打印1到N
代码如下:
void PrintN ( int N )
{
if ( N ){
PrintN( N – 1 );
printf(“%d\n”, N );
}
return;
}
上述代码通过递归思想来打印1到N,看似好像没有定义临时变量,但其实,每一次递归调用都需要耗费内存来维护当前函数的执行状态,一直到N为0时开始一层层往回执行。当N足够大时,内存显然是不够用的。
场景:多项式如下
给定任意的x,求结果
一般的思路
//其中n表示多项式的项数,a表示每一项对应的系数
//这里假定每一项的系数就是i
double f1( int n, double a[], double x )
{
int i;
double p = a[0];
for ( i=1; i<=n; i++ )
p += (a[i] * pow(x, i));
return p;
}
这个算法是最直观的,直接表示出通项公式,然后利用公式求和,最终的时间复杂度为n的平方
好的算法
double f( int n, double a[], double x )
{
int i;
double p = a[n];
for ( i=n; i>0; i-- )
p = a[i-1] + x*p;
return p;
}
通过提取多项式,化简之后,时间复杂度减小为n
原文:https://www.cnblogs.com/ericling/p/11876945.html