数据结构学习(三):算法描述及分析

一、算法的定义

  • 数据元素之间的关系有逻辑关系和物理关系,对应的运算有基于逻辑结构的运算描述 和基于存储结构的运算实现

  • 通常把基于存储结构的运算实现的步骤或过程称为算法

二、算法的五个重要特性

1. 有穷性:在有穷步之后结束,算法能够停机
2. 确定性:无二义性
3. 可行性: 可通过基本运算有限次执行来实现,也就是算法中的每一个动作能够被机器的执行
4. 有输入:表示存在数据处理
5. 有输出:表示存在数据处理

三、算法描述的一般格式(输入通过算法转化为输出)

 返回值   算法对应的函数名(形参列表)
     {      //临时变量的定义         
            //实现由输入参数列表到输出参数的操作
            ............
      }
    返回值: 通常为bool 类型,表示算法是否成功执行

形参列表:由输入型参数(算法输入)和输出参数(算法输出)构成

四、分析算法占用的资源

(1)CPU时间-----时间性能分析
(2)内存空间-----空间性能分析
算法分析目的:分析算法的时空效率以便改进算法性能

五、算法分析方式

1. 事后分析统计方法:编写算法对应程序,统计其执行时间
不能用绝对执行时间进行比较原因: 编写程序的语言不同;执行程序的环境不同;其他原因。

2. 事前估算分析方法:撇开上述因素,认为算法的执行时间是问题规模n的函数

六、算法时间复杂度分析

  • 一个算法是由控制结构(顺序、分支和循环结构)和原操作(指固有数据类型的操作,
    如+、-、*、/、++和–等)构成的。算法执行时间取决于两者的综合效果

  • 一个算法的基本构成:控制语句1 原操作 控制语句2 原操作…控制语句n 原操作

七、分析算法的执行时间

  1. 求出算法所有原操作的执行次数(也称为频度),它是问题规模n的函数,用T(n)表示

  2. 算法执行时间大致 = 原操作所需的时间 x T(n) 。所以T(n)与算法的执行时间成正比
    为此可用 T(n) 表示算法的执行时间

  3. 比较不同算法的 T(n)大小得出算法执行时间的好坏

  4. 算法的执行时间用时间复杂度来表示
    算法中执行时间 T(n) 是问题规模 n 的某个函数 f(n),记作:T(n) =O( f(n) )
    O表示随问题规模 n 的增大算法执行时间的增长率和 f(n) 的增长率相同

  5. 时间复杂度本质上讲,是一种 T(n) 最高数量级的比较。也就是只求出T(n)的最高阶,
    忽略其低阶项和常系数

八、简化的算法时间复杂度分析

  1. 算法中的基本操作一般是最深层循环内的原操作

  2. 算法执行时间大致 = 基本操作所需的时间 X 其运算次数

  3. 在算法分析时,计算 T(n) 时仅仅考虑基本操作的运算次数

九、算法空间复杂度分析

  1. 空间复杂度:用于量度一个算法在运行过程中临时占用的存储空间大小
    一般也作为问题规模n 的函数,采用数量级形式描述,记作:S(n) =O(g(n))

  2. 原地工作或就地工作算法:若一个算法的空间复杂度为 O(1)

  3. 临时占用的存储空间:指的是函数体内分配的空间

  4. 算法中临时分配的变量个数与问题规模 n 无关

十、其他概念

  1. 递归算法分析—也称为变长时空分析

  2. 非递归算法分析—也称为定长时空分析

  3. 常数阶:一个没有循环的算法的执行时间与问题规模 n 无关,记作 O(1)

  4. 线性阶:一个只有一重循环的算法的·执行时间与问题规模 n 的增长率呈线性增大关系,记作 O(n)

  5. 平方阶O(n2) 、立方阶O(n3) 、对数阶O(log2 n) 、指数阶O(2n)等
    O(1) < O(log2n) < O(n) < O(nlog2n) < O(n2) < O(n3) < O(2n) < O(n!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值