目录

数据结构算法与算法分析

数据结构——算法与算法分析

1.算法的定义

严谨概念: 算法是解决待定问题求解步骤的描述,在计算机中表示为指令的有限序列,并且每条指令表示一个或多个操作

简单来说就是解决问题的方法和步骤,先干什么,后干什么

2.算法的描述

  1. 自然语言:中文,英文

  2. 流程图:传统流程图,NS流程图

    https://i-blog.csdnimg.cn/direct/87669c1ae5fd4233a3fbf9ce1cfc1eaa.png

  3. 伪代码,类语言

  4. 程序代码

3.算法的特性

  • 输入:零个或多个输入
  • 输出:至少一个输出
  • 有穷性:算法在执行有限步骤后会自动结束,而不会无限循环,并且每步在可接受的时间内完成
  • 确定性:算法的每一步都具有明确的含义,不会出现二义性
  • 可行性:算法的每一步必须可行,都能通过执行有限次数完成

4.算法设计的要求

  • 正确性 :算法至少具有输入,输出,加工处理无歧义性,能正确反映问题的需求,能够得到问题的正确答案

    意思就是你写一个算法,至少得正确,而正确有以下几个层次

    1.算法没语法错误

    2.算法对于 合法和非法 输入数据能够产生满足要求的输出结果

    3.算法对于精心选择的,甚至故意刁难的 测试数据 都有满足要求的输出结果

    4.算法对于一切输入数据都有满足要求的结果

    算法大部分情况下只能靠数学方法证明其正确性,而证明一个复杂算法在所有层次上完全正确的代价十分高昂,所以一般把 层次3 当作正确性判断的标准

  • 可读性 :便于阅读,理解,交流

  • 健壮性 :当有不合法的输入数据时,算法也能有相关的处理,而不是输出莫名其妙的结果

  • 高效性 :尽量满足时间效率高和存储量低

5.算法的效率及其度量方法

算法主要从时间和空间两个方面来度量效率,并且时间和空间效率在某种情况下有一定矛盾,所以我们需要综合平衡这两个方面来评估算法

5.1时间效率 ​​​​​​

就是看一个程序在计算机上执行所消耗的时间

有两种度量方法

  1. 事后统计方法

    直接写出程序然后实验,这个方法缺陷较大不予考虑

  2. 事前分析估算

    在写程序前用统计方法来对算法进行估算,经研究发现,一个程序所消耗的时间多少主要取决于

    1.算法的策略,方法(算法本身的好坏)

    2.编译产生的代码质量(软件)

    3.问题输入的规模(我们主要研究的原因)

    4.机器执行指令的速度(硬件

    算法运行时间=一个简单操作所需时间(基本单位)*简单操作次数(数量)

    我们引入一个叫算法的 时间复杂度 的概念来衡量算法的运行时间

    算法的时间复杂度

    是一个关于问题输入规模与运行时间的函数(一般是最坏时间复杂度),通常采用大O记法

    大O记法下的时间复杂度推导十分简单,只需去其常数,取最高次项

    常见的时间复杂度有

    1.常数阶O(1),且不管常数具体是几,全部记作O(1)

    2.线性阶O(n)

    3.对数阶O(log2n)

    https://i-blog.csdnimg.cn/direct/3c830c6b457049959bc1b72fffe217bb.png

    4.平方阶 O(n^2)

    如何计算时间复杂度

    就是分析循环结构的运行情况,从代码中得到一个函数,可以用级数求和的方法求其复杂度 https://i-blog.csdnimg.cn/direct/b65801d3058e4b4ca3df5e13c995a691.png

5.2空间效率

https://i-blog.csdnimg.cn/direct/38d5231b60ae4218bb1cb6f445802180.png