数据结构和算法本质就是帮我们用最快的时间和最少的空间来执行我们的代码。所以,执行效率是衡量一个算法的非常重要的指标。那如何来计算你的算法代码的执行效率呢?这就需要时间、空间复杂度来分析了。
有人可能会说,我把代码执行一遍,然后通过统计、监控就能知道执行的时间和需要的内存大小。干嘛还需要时间、空间复杂度来分析呢?我都能得到具体需要的时间和内存了,还需要多此一举吗?
首先,这种评估算法效率的方法没有问题,我们还给这种方法起了一个名字,叫事后统计法。但是这种方法有很大的局限性。
1. 测试结果受测试环境影响
测试环境的硬件对测试结果有非常大的影响。比如,同样的代码在i7和i5的机器上执行,结果肯定是不同的。还有可能在一台机器上A代码比B代码执行速度要快,我们换另外一台机器却得到相反的结果。
2. 测试结果受数据规模的影响
比如排序算法,原始数据如果有序度不一样,执行的时间就会有很大的差别。原始数据规模的大小不同,也可能会让原来速度快的算法变成速度慢的。
所以我们就需要一个不需要具体的测试数据来测试,就可以大概估算出执行效率的方法,就是时间、空间复杂度分析方法。
大O复杂度表示方法
我们通过度代码,来估算出它执行所需要的时间,下边来看一段具体的代码。
public int Function(int n)
{
int sum = 0;
for(int i = 1; i <= n; i++)
{
sum += i;
}
return sum;
}