数据结构算法

数据结构与算法之美笔记

2018-11-07  本文已影响68人  shenyoujian
是什么:

数据结构是用来存储数据的一组数据结构,算法是用来操作数据的一组方法,他们相辅相成。数据结构是为算法服务的,算法作用于特定的数据结构上的。

学什么:
怎么学:
为什么需要复杂度分析:
复杂度:
如何看时间复杂度:
    int cal(int n) {
        int sum_1 = 0;
        for (int i = 1; i < 100; i++) {
            sum_1 = sum_1 + i;
        }


        int sum_2 = 0;
        for (int i = 1; i <= n; i++) {
            sum_2 = sum_2 + i;
        }


        int sum_3 = 0;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; i <= n; j++) {
                sum_3 = sum_3 + i * j;
            }
        }
        return sum_1 + sum_2 + sum_3;
    }

    int cal(int n) {
        int sum_2 = 0;
        for (int i = 1; i <= n; i++) {
            sum_2 = sum_2 + f(i);
        }
        return sum_2;
    }


    int f(int n) {
        int sum_3 = 0;
        for (int i = 1; i <= n; i++) {
            sum_3 = sum_3 + i;
        }
        return sum_3;
    }

常见的时间复杂度
O(logn)和O(nlogn)
     void cal(int n) {
        int i = 1;
        while (i <= n) {
            i = i * 2;
        }
    }
O(m+n)和O(m*n) :
    int f(int n, int m) {
        int sum_1 = 0;
        for (int i = 1; i <= n; i++) {
            sum_1 = sum_1 + i;
        }

        int sum_2 = 0;
        for (int i = 1; i <= m; i++) {
            sum_2 = sum_2 + i;
        }
        return sum_2 + sum_1;
    }
空间复杂度

比较简单,表示算法的存储空间与数据规模之间的增长关系。

int[] a = new int[n];

同一个算法,在不同的情况时间复杂度也会不同,例如在数组中查找一个数据,可以遍历整个数组,这时候该代码的时间复杂度为O(n)

    int find(int[] a, int x) {
        int res = -1;
        for (int i = 0; i < a.length; i++) {
            if (x == a[i]) res = 0;
        }
        return res;
    }

但是我们并不需要遍历整个数组,只要找到返回就行了,只是加句break。

    int find(int[] a, int x) {
        int res = -1;
        for (int i = 0; i < a.length; i++) {
            if (x == a[i]) {
                res = 0;
                break;
            }
        }
        return res;
    }

这时候它的复杂度是不确定的,例如第一个O(1)就找到或者最后一个才找到O(n),其中O(1)是该算法的最好情况时间复杂度,O(n)是该算法的最坏情况时间复杂度
同样,还有一个平均时间复杂度,其实数据在数组中的位置有n+1种情况,在数组的 0~n-1 位置中和不在数组中,我们把在每种情况需要查找的次数相加然后除以n+1,这时候就可以得到需要遍历元素个数的平均值
1+2+3+4.....+n+n/n+1 = n(n+3)/2(n+1)
这时候平均时间复杂度为O(n)。

上一篇 下一篇

猜你喜欢

热点阅读