算法3_绪论

算法分析

算法分析(Algorithm Analysis):对算法所需要的两种计算机资源——时间和空间进行估算

  • 时间复杂性(Time Complexity)
  • 空间复杂性(Space Complexity)

算法分析的目的:

  • 设计算法——设计出复杂性尽可能低的算法
  • 选择算法——在多种算法中选择其中复杂性最低者

时间复杂性分析的关键:

  • 问题规模:输入量的多少;
  • 基本语句:执行次数与整个算法的执行时间成正比的语句

渐进符号

1、大O符号
若存在两个正的常数c和n0,对于任意n≥n0,都有T(n)≤c×f(n),则称T(n)=O(f(n)),或称算法在O(f(n)中。
2、大Ω符号
若存在两个正的常数c和n0,对于任意n≥n0,都有T(n)≥c×g(n),则称T(n)=Ω(g(n))
3、Θ符号
若存在三个正的常数c1、c2和n0,对于任意n≥n0都有c1×f(n)≥T(n)≥c2×f(n),则称T(n)=Θ(f(n))

最好、最坏和平均情况

如果问题规模相同,时间代价与输入数据有关,则需要分析最好情况、最坏情况、平均情况。

  • 最好情况:出现概率较大时分析
  • 最差情况:实时系统
  • 平均情况:已知输入数据是如何分布的,
    通常假设等概率分布

非递归算法的分析

一般步骤:

  1. 决定用哪个(或哪些)参数作为算法问题规模的度量
  2. 找出算法中的基本语句
  3. 检查基本语句的执行次数是否只依赖于问题规模
  4. 建立基本语句执行次数的求和表达式
  5. 用渐进符号表示这个求和表达式
    在这里插入图片描述

关键:建立一个代表算法运行时间的求和表达式,然后用渐进符号表示这个求和表达式。

算法的后验分析

一般步骤:

  1. 明确实验目的
  2. 决定度量算法效率的方法,为实验准备算法的程序实现
  3. 决定输入样本,生成实验数据
  4. 对输入样本运行算法对应的程序,记录得到的实验数据
  5. 分析得到的实验数据

慕课:算法及其时间复杂度

算法A解问题P:
把问题P的任何实例作为算法A的输入,每步计算是确定性的。A 能够在有限步停机,输出该实例的正确的解。

基本运算与输入规模
•算法时间复杂度: 针对指定基本运算,计数算法所做运算次数
•基本运算:

  • 排序: 元素之间的比较
  • 检索: 被检索元素 x与数组元素的比较
  • 整数乘法: 每位数字相乘(位乘) 1 次
    m位和n位整数相乘要做mn次位乘
  • 矩阵相乘: 每对元素乘 1 次
    ij矩阵与jk矩阵相乘要做ijk次乘法
  • 图的遍历: 置指针

•输入规模:输入串编码长度通常用下述参数度量:

  • 排序:数组中元素个数 n
  • 检索:被检索数组的元素个数 n
  • 整数乘法:两个整数的位数 m, n
  • 矩阵相乘:矩阵的行列数 i, j, k
  • 图的遍历:图的顶点数 n, 边数 m

•算法基本运算次数可表为输入规模的函数
•给定问题和基本运算就决定了一个算法类

算法的两种时间复杂度

对于相同输入规模的不同实例,算法的基本运算次数也不一样,可定义两种时间复杂度
最坏情况下的时间复杂度 W(n) 算法求解输入规模为 n 的实例所需要的最长时间
平均情况下的时间复杂度 A(n) 在给定同样规模为 n 的输入实例的概率分布下,算法求解这些实例所需要的平均时间

A(n) 计算公式
平均情况下的时间复杂度 A(n)
设 S 是规模为 n 的实例集 实例 I∈S 的概率是 PI
算法对实例 I 执行的基本运算次数是 tI
在这里插入图片描述

在某些情况下可以假定每个输入实例概率相等

算法的伪码表示

赋值语句:<-
分支语句:if …then … [else…]
循环语句:while, for,repeat until
转向语句:goto
输出语句:return
调用:直接写过程的名字
注释://…

函数的渐近的界

大O符号
设 f 和 g是定义域为自然数集 N上的函数。 若存在正数 c 和 n0,使得对一切n>=n0有0<=f(n)<=cg(n)成立, 则称 f(n) 的渐近的上界是 g(n),记作
f (n) = O(g(n))

大Ω符号
设 f 和 g是定义域为自然数集N上的函数。若存在正数 c 和 n0,使得对一切 n>=n0有0<=cg(n)<=f(n)
成立,则称 f(n) 的渐近的下界是 g(n),记作
f (n) = Ω(g(n))

小o符号
设 f 和 g是定义域为自然数集 N上的函数。若对于任意正数 c 都存在n0,使得对一切n >=n0有0 <=f(n) < c g(n)成立, 则记作
f (n) = o(g(n))

小ω符号
定义:设 f 和 g是定义域为自然数集 N上的函数。若对于任意正数 c 都存在 n0,使得对一切 n >=n0
0<=cg(n)<f(n)成立, 则记作
f (n) = ω(g(n))

Θ符号
若 f (n) = O(g(n)) 且 f (n) = Ω(g(n)),则记作
f (n) = Θ(g(n))

有关函数渐近线的界的定理

定理1:
设f和g是定义域为自然数集合的函数。
在这里插入图片描述
一些重要结果:

在这里插入图片描述在这里插入图片描述
定理2:
设f,g,h是定义域为自然数集合的函数。
在这里插入图片描述
定理3:
假设函数f 和g的定义域为自然数集,若对某个其它函数 h, 有 f =O(h) 和 g=O(h), 那么 f + g = O(h)。

该性质可以推广到有限个函数。算法由有限步骤构成。若每一步的时间复杂度函数的上界都是 h(n),那么该算法的 时间复杂度函数可以写作 O(h(n))。

几类重要的函数

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值