您的位置:首页 > 理论基础 > 数据结构算法

温故知新之数据结构算法复杂度

2014-06-08 17:06 316 查看
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;
}
多数情况下,算法执行时所用的时间更令人关注,如果有必要,可以通过增加空间复杂度来降低时间复杂度,同理,也可以通过增加时间复杂度来降低空间复杂度,具体问题,具体分析。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: