1、影响算法效率的主要因素
算法采用的策略和方法
问题的输入规模
编译器所产生的代码
计算机执行速度
2、时间复杂度
// 时间复杂度:2n + 5
long sum1(int n)
{
long ret = 0; \\1
int* array = (int*)malloc(n * sizeof(int)); \\1
int i = 0; \\1
for(i=0; i<n; i++) \\n
{
array[i] = i + 1;
}
for(i=0; i<n; i++) \\n
{
ret += array[i];
}
free(array); \\1
return ret; \\1
}
\\时间复杂度: n + 3
long sum2(int n)
{
long ret = 0; \\1
int i = 0; \\1
for(i=1; i<=n; i++) \\n
{
ret += i;
}
return ret; \\1
}
\\时间复杂度: 3
long sum3(int n)
{
long ret = 0; \\1
if( n > 0 )
{
ret = (1 + n) * n / 2; \\1
}
return ret; \\1
}
随着问题规模n的增大,它们操作数量的差异会越来越大,因此实际算法在时间效率上的差异也会变得非常明显!
判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略。
在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度。
3、空间复杂度
//空间复杂度:12 + n
long sum1(int n)
{
long ret = 0; \\4
int* array = (int*)malloc(n * sizeof(int)); \\4 + 4 * n
int i = 0; \\4
for(i=0; i<n; i++)
{
array[i] = i + 1;
}
for(i=0; i<n; i++)
{
ret += array[i];
}
free(array);
return ret;
}
\\空间复杂度: 8
long sum2(int n)
{
long ret = 0; \\4
int i = 0; \\4
for(i=1; i<=n; i++)
{
ret += i;
}
return ret;
}
\\空间复杂度: 4
long sum3(int n)
{
long ret = 0; \\4
if( n > 0 )
{
ret = (1 + n) * n / 2;
}
return ret;
} 多数情况下,算法执行时所用的时间更令人关注,如果有必要,可以通过增加空间复杂度来降低时间复杂度,同理,也可以通过增加时间复杂度来降低空间复杂度,具体问题,具体分析。
本文探讨了影响算法效率的因素,包括算法策略、输入规模等,并详细分析了时间复杂度和空间复杂度的概念。通过三个示例算法,展示了如何计算复杂度及不同算法间的效率差异。
904

被折叠的 条评论
为什么被折叠?



