数据结构与算法(1)

1 什么是时间复杂度和空间复杂度

关于这个问题稍后再说,那么首先如果关于一段程序,我们如何知道她的效率如何呢,最好的办法就是运行它,循环1k次、1kk次、1kkk次。这样可以直观的看到的到程序的运行效率,但是如果这段程序只是刚刚在你的脑子中诞生,然后你将它记在了纸上。或者当给你一个问题的100种解法,让你初步估计这些中解法的运行效率,那么我们一个个的写一遍然后运行就显得很是麻烦和效率低下了。那么如何直观的通过观察就可以知道一个程序、算法的运行效率呢?
答案就是分析程序运行消耗的时间和空间分析。那么为什么要从这两个角度去分析呢。我们最常听到的一段话就是时间换空间,空间换时间。那么就是运行效率越高,可能需要的存储空间就越大;而存储空间越是紧缩,那么往往需要运行的效率就会低下。如果能够两者兼容,那么这个算法只能用绝妙二字概括了。
而时间复杂度和空间复杂度就是对这两者的分析。

2 时间复杂度

分析时间复杂度,可以通过一段程序来说比较更容易的理解。

        // 代码片段一
        int sum = 0;
        for (int i = 0; i < n; i++) {
            sum += i;
        }
        // 代码片段二
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            sum += i;
        }

如上代码片段1,因为代码的运行次数根据参数n,而参数n的值是随时发生变化的,是一个不可预测的值,所以这段代码的运行时间是O(n)
而代码片段2,因为代码的执行次数是一个固定的值,不会因为参数的原因而变化。
如果这两段代码在一个方法中的时候,时间复杂度仍然是O(n),因为当n足够大的时候,只执行100次的代码片段2的执行时间是可以忽略的。

3 空间复杂度

和时间复杂度一样

你可能感兴趣的:(数据结构与算法(1))