最好,最坏,平均时间复杂度分析

最好,最坏,平均时间复杂度分析

最好最坏情况复杂度

例子1

    public static int find(int[] array, int n, int x){
        int i = 0;
        int pos = -1;
        for (; i < n; ++i) {
            if (array[i] == x) {
                pos = i;
            }
        }
        return pos;
    }

分析例子1的时间复杂度
例1的主要实现在for循环中的array[i]上。 他的时间复杂度就是来自for循环 所以他的时间复杂度就是O(n). n就是数组的长度。


但是经常有时是,不需要将所有的数据遍历一遍结束。而是可能在中途就退出,提前结束循环。
例如下面的例2

    public static int find(int[] array, int n, int x){
        int i = 0;
        int pos = -1;
        for (; i < n; ++i) {
            if (array[i] == x) {
                pos = i;
                break;
            }
        }
        return pos;
    }

那么上述的时间复杂度还是O(n)吗?
那就需要分情况来讲述了
1) 有可能相等条件就在数组的第一个。 那么时间复杂度就是O(1)
2) 如果不存在那就需要将数组全部遍历 ,那么时间复杂度就是O(n)

顾名思义,
O(1)就是最好情况时间复杂度,即最理想的情况下执行
O(n)就是最坏情况时间复杂度,即最糟糕的情况下执行

平均时间情况复杂度

最好最坏情况时间复杂度都是在·极端·的情况下才会产生的,大部分时间使用的是平均时间复杂度。

查找变量x在数组中的位置,有N+1种情况及
1)在数组中 0 ~ n-1的位置中
2)不再数组中
.
每一种情况需要遍历的次数
1+2+3+…n+n/n+1 = 需要遍历的元素个数的平均值
倒序相加法
省略常量,系数等等 得到平均时间复杂度O(n)

要查找变量x,要么在数组里,要么不在数组里。
假设在数组和不在数组的概率是1/2
在0-n的概率也是一样的为1/n
概率乘法法则 即0 ~ n-1中的任意位置的概率都是1/(2n)

(1+2+3+…n+n) *1/(2n) = 3n+1/4
上述叫做加权平均时间复杂度
最后的时间复杂度也是O(n)

猜你喜欢

转载自blog.csdn.net/weixin_39232166/article/details/105772413
今日推荐