数据结构算法

本文详细介绍了算法的基本特性,包括有穷性、确定性和有效性,并着重讲解了算法的时间复杂度和空间复杂度。通过大O表示法,展示了不同阶别的时间复杂度,如O(1)、O(n)、O(n^2)等,并举例说明了如何分析算法的时间复杂度。同时,提到了算法的最坏时间复杂度和平均时间复杂度在评估算法性能中的重要性。
摘要由CSDN通过智能技术生成

定义:

        算法:对特定问题求解步骤的一种描述。是指令的有限序列。

特性:

  1. 有穷性:有限

  2. 确定性:需求确定、指令确定

  3. 有效性:指令都是由意义

  4. 输入:

  5. 输出:

目标:

  1. 正确性:基本要求,需求和实现对应。

  2. 可读性:使程序员能够读懂,编写代码时可以辅助注释。

  3. 健壮性:临界值的处理、无效数据的校验等。

  4. 高效性:使用较少的资源(资源分2种:时间资源、空间资源)。一个好的算法要做到执行时所需时间尽量短,所需的最大存储空间尽量少。

分析概述:

  • 算法的复杂度是衡量算法优劣的重要依据。

  • 算法的复杂度分类:时间复杂度、空间复杂度。

    • 时间复杂度:执行时间的长短。

    • 空间复杂度:执行时空间需求量,也就是计算机资源的使用量。

分析时间复杂度:

        1、主要考虑因素:      

                1、算法本身

                2、问题规模

                3、程序语言选择

                4、编译程序(JDK优势)

                5、硬件速度

                6、运行软件

时间复杂度通过大O表示法进行表示的

  • 大O表示法,用于估算一个算法的执行时间。

  • 算法执行时间:Σ(指令的执行次数 * 指令的执行时间)。

  • 指令的执行时间是固定的,可以不考虑。只需要考虑指令的执行次数即可。

  • 大O表达法,通过统计指令的执行次数,就可以估算出一个算法的优劣。

  • 指令的执行次数:每行代码执行的次数,将所有的次数累加在一起即可。

  • 例如1.7:2n^3 + 3n^2+2n+1 总次数表达式 --> 只考虑最高次幂 --> O(n^3)

  • 大O表达式只需要考虑最高次幂的项。

大O表达式常见的形式

  • 常量阶:O(1) ,执行的次数与输入无关。

  • 线性阶:O(n) ,执行的次数与输入成正比关系。例如:一层循环。

  • 平方阶:O(n^2) , 执行的次数与输入成平方关系。例如:二层循环

  • 立方阶:O(n^3) ,执行的次数与输入成立方关系。例如:三层循环

  • 对数阶:O(log2n) , 执行的次数与输入成开方关系。例如:求对数 log28 = 3

  • 线性对数阶:O(nlog2n)

 

  • O(log2n) 指数计算:R表示次数

 

  • O (n) :一层循环

  • O(n^2):二层循环(99乘法表)

int n = 9;
for(int i = 0 ; i < n ; i ++) {
    for(int j = 0 ; j < n : j ++) {
        // 次数 n*n
    }
}
  • O(n^3):三层循环  
int n = 9;
for(int i = 0 ; i < n ; i ++) {				//时针
    for(int j = 0 ; j < n : j ++) {			//分针
        for(int m = 0 ; m < n ; m++) {		//秒针
            // 次数 n * n * n
        }
    }
}

算法分析:最好、最坏、平均

* 实例:从数组中获得内容 a[1...n]

* 最好时间复杂度:获得最好的情况,例如:数组中的第一个数据。O(1)表示此情况。
* 最坏时间复杂度:获得最坏的情况,例如:数据中最后一位。O(n)表示此情况。
* 平均时间复杂度:
  * 1+...+n和 : (n+1)  *  n/2
  * 平均,和/n  :(n+1)  *  n/2 / n  ---> (n + 1) / 2   --> O(n)表示

* 结论:在一般情况下,取`最坏时间复杂度`或`等概率下的平均时间复杂度`作为算法的时间复杂度。

西格玛求和

需求:1+2+3+4+....+n  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值