算法-复杂度分析

复杂度分析

不依赖具体的执行环境

不用具体的测试数据

在算法实现前,我们在脑海就可以评估算法的性能

评估一个算法的性能:本质上就是评估这个算法代码执行的时间

N 为数据规模

 

O复杂度表示法

表示算法的性能,通常看最差的情况,算法运行的上界

O(n)  T=5n+2

常数不重要,复杂度描述的是随着数据规模n的增大,算法性能的变化趋势

T(n)就是表示算法程序段执行的时间

n表示的是算法输入数据规模的大小

f(n)表示程序段所有语句执行的次数总和

大O表示程序段执行时间T(n)与f(n)函数的关系

 

随着数据规模n的不断增大,以上T(n)中的系数

低阶、常量对执行时间的增长趋势影响非常的小

 

 

常量阶时间复杂度

只要你的程序段执行的时间和输入数据规模没有关系的话,即使需要执行成干上万行的代码,那么你的程序时间复杂度仍然是O(1)

对数阶时间复杂度

 

 

 

 理论上我们知道对于所有底数 b>1,函数 \log_2n在大O记号下的渐近增长率是相同的,但在实际图像上,我们可以观察到它们之间的差异仅在于比例系数

 

时间复杂度分析方法

 加法法则

乘法法则

常用时间复杂度

 
阶乘(Factorial)是一个数学运算,通常表示为 n! ,指的是所有小于及等于 n 的正整数的乘积。例如,5 的阶乘(写作 5!)是 5 × 4 × 3 × 2 × 1 = 120。

最好最坏时间复杂度

 平均时间复杂度(不关心)

public boolean contains(int[]arr,int target){
    for (int i=0;i<arr.length -1j i++){
        if (arr[i]=target){
            return true;
        }
        return false;
    }
}

target在数组中和不在数组中的概率都是1/2
target在数组中每个位置的概率是1/2*1/n 

不在数组中 需要比较 n^*(1/2)

空间复杂度分析

常量空间复杂度:0(1)

public boolean contains(int[]arr,int target){
    for (int i=0;i<arr.length -1j i++){
        if (arr[i]=target){
            return true;
        }
        return false;
    }
}

  线性阶空间复杂度:O(n)

public int[]arrayCopy(int[]arr){
    int[] newArray = new int[arr.length];
    for (int i=0;i<arr.length -1;i++){
        newArray[i]=arr[i];
    }
    return newArray;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值