算法学习之算法效率分析

本文详细介绍了算法效率分析的基础,包括输入规模的度量、运行时间的度量单位和效率类型。通过渐进符号О、Ω、Θ探讨了算法的最优、最差和平均效率。讨论了非递归和递归算法的效率分析方法,并给出了实例,如元素唯一性问题、矩阵乘法和汉诺塔问题,以及斐波那契数列的计算。
摘要由CSDN通过智能技术生成

算法效率分析基础

输入规模的度量

几乎所有的算法,对于规模更大的输入都需要运行更长的时间。例如,需要更多时间来对更长的数组排序,更大的矩阵相乘也需要花费更多时间,等等。所以,使用一个以算法输入规模式n为参数的函数,来研究算法效率是非常合乎逻辑的。

运行时间的度量单位

  • 统计算法每一步操作的执行次数——不可行。

  • 统计算法中最重要的操作—基本操作的执行次数。

    • 排序的基本操作:比较
    • 矩阵乘法的基本操作:乘法
    • 多项式求值的基本操作:乘法
  • 执行次数C(n)是输入规模n的函数,算法运行时间T(n)是执行次数的函数:T(n) ≈ copC(n)
    其中: cop为特定计算机上一个基本操作的执行时间,是常量。

    增长次数

    为什么对于大规模的输入要强调执行次数的增长次数呢?这是因为小规模输入在运行时间上差别不足以将高效的算法和低效的算法法区分开来

算法的最优、最差和平均效率

  • 一个算法的最差效率是指当输入规模为n时,算法的最坏情况下的效率。这时,相对于其他规模为n的输入,该算法的运行时间最长。
  • 一个算法的最优效率是指当输入规模为n时,算法在最优情况下的效率。这时,与其它规模为n的输入相比,该算法运行得最快。
  • 然而,无论是最差效率分析还是最优效率分析都不能提供一种必要的信息:在“典型”或者“随机”输入的情况下, 一个算法会具有什么样的行为。这正是平均效率试图提供给我们信息。
  • 还有一种类型的效率称为摊销效率。它并不适用于算法的单次运行,而是应用于算法对同样数据结构所执行的一系列操作。

分析框架概要

  • 算法的时间效率和空间效率都用输入规模的函数进行度量。
  • 我们用算法基本操作的执行次数来度量算时间效率。通过计算算法消耗的额外存储单元的数量来度量空间效率。
  • 在输入规模相同的情况下,有些算法的效率会的显著差异。对于这样的算法,我们需要区分最差效率,平均效率和最优效率。
  • 本框架主要关心,当算法的输入规模趋向于无限大的时候,其运行时间(消耗的额外空间)函数的增长次数。

渐进符号和基本效率类型

在这里插入图片描述

符号О

定义1 我们把函数t(n)包含在O(g(n)) 中,记作t(n) ∈ O(g(n)) ;它的成立条件是:对于所有足够大的n, t(n) 的上界由g(n)的常数倍数所确定,也就是说,存在大于0的常数c和非负的整数n0,使得:
在这里插入图片描述

符号Ω

定义2 我们把函数t(n)包含在Ω(g(n))中,记作t(n)∈Ω(g(n)),它的成立条件是:对于所有足够大的n, t(n)的下界由g(n)的常数倍所确定,也就是说,存在大于0的常数c和非负的整数n0,使得:

在这里插入图片描述

符号Θ

定义 3我们把函数t(n)包含在Θ(g(n)) 中,记作t(n) ∈ Θ(g(n)) ;它的成立条件是:对于所有足够大的n, t(n) 的上界、下界都由g(n)的常数倍数所确定,也就是说,存在大于0的常数c1,c2和和非负的整数n0,使得:

在这里插入图片描述

利用极限比较增长次数

虽然符号O, Ω和Θ的正式定义对于证明它们的抽象性质是不可缺少的,但我们很小直接用它们来比较两个特定函数的增长次数。有一种较为简便的比较方法,它是基于对所计论的两个函数的比率求极限。有3种极限情况会发生:

在这里插入图片描述

基本的效率类型

在这里插入图片描述

关于渐进时间效率:

  • 对规模较小的问题,决定算法工作效率的可能是算法的简单性而不是算法执行的时间

  • 当比较两个算法的效率时,若两个算法是同阶的,必须进一步考察阶的常数因子才能辨别优劣。

非递归算法的数学分析

考虑一下从n个元素的列表中查找元素最大值的问题.简单起见,我们假设列表是用数组实现的。下面给出一个解决问题的标准算法的伪代码。

算法  MaxElement(A[0..n-1])
         /
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值