2020-9-6数据结构与算法笔记(2)

1.算法时间复杂度分析

事后分析估算法(不常用)

利用计算机计时器对不同算法编制的程序运行时间进行比较,花费大量时间和精力判断,不同的测试硬件环境差别导致结果差异很大。

public static void main(String[] args){
    long start = System.currentTimeMillis();
    
    //算法

    long end = System.currentTimeMillis();

    System.out.println(end-start);

}

事前分析估算法

总结发现,程序在计算机上运行消耗的时间取决如下因素:

1.算法采用的策略方案

2.编译产生的代码质量

3.问题的输入规模

4.机器执行指令的速度

由此我们可以发现,如果算法固定抛开计算机与软件的有关的因素,该算法执行时间就只和问题的输入规模有关系

在研究算法的效率时,我们只考虑核心代码的执行次数,简化分析(不计算循环,变量声明,打印等操作)最重要的是把核心操作次数和输入规模关联起来。

结论:

1.算法函数中的常数可以忽略

2.算法函数中最高次幂的常数因子可以忽略

3.算法函数中最高次幂越小,算法效率越高

大O记法表示时间复杂度 O()

有以下规则:

1用常数1取代运行时间中的所有加法常数

2在修改后的运行次数中,只保留高阶项

3如果最高阶项存在,且常数因子不为1,则除去与这个项相乘的常数

算法中常见的大O阶

1.线性阶O(n)

2.平方阶O(n^2),双层嵌套循环

3.立方阶O(n^3),三层嵌套循环

4.对数阶O(logn)

5.常数阶O(1)

复杂程度从低到高依次为:

O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)

最坏情况

我们要保证在最坏的情况程序也能正常运行,所以算法时间复杂度一般考虑最坏情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ConeyLa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值