热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

算法分析(渐进分析)

目录1.T(n)函数2.渐进分析2.1渐进紧确界(θ记号)举例2.2渐进上界(O记号)举例2.3渐进下界(Ω记


目录

    • 1.T(n)函数
    • 2.渐进分析
      • 2.1渐进紧确界(θ记号)
        • 举例
      • 2.2渐进上界 (O记号)
        • 举例
      • 2.3渐进下界 (Ω记号)
        • 举例
    • 3.常用的换算公式
      • 3.1举例证明




算法分析分为算法时间复杂度分析{\color{Red}算法时间复杂度分析}算法空间复杂度分析{\color{Red}算法空间复杂度分析}。一般而言,时间对于我们来说更重要,算法的优化主要也是对时间的优化,而对于空间只要我们的计算机性能较好,对于计算结果影响就不会很大。,下面主要也是对算法一些关于时间复杂度的描述!





1.T(n)函数


当算法时间仅依赖于问题输入规模n,我们可以将其表示为T(n)。

T(n)直接由每一步的操作次数之和相加构成。


下面我们以插入排序的伪代码为例来计算它的T(n)
在这里插入图片描述


但是因为当规模变大时,其主要决定作用的就是最高项,所以我们只需要取它的最高项即可,那么久可以表示为 T(n) = n2



2.渐进分析


渐进分析: 就是指忽略掉T(n)的系数与低阶项,仅关注高阶项,用记号θ表示。


下面我们介绍一些渐进记号:
在这里插入图片描述


2.1渐进紧确界(θ记号)

先给出它的官方定义:

在这里插入图片描述

什么意思呢?就是用θ(g(n))来描述T(n)有一个具体的上界和一个具体的下界,当我们可以找到时,才能进行θ表示。


举例

T(n)=32n2+72−4=θ(n2)T(n) = \frac{3}{2} n^{2} + \frac{7}{2} - 4 = \theta(n^{2})T(n)=23n2+274=θ(n2)

令n0 = 2,那么当 n ≥ n0时,有

寻找下界: 32n2+72−4≥32n2≥n2\frac{3}{2} n^{2} + \frac{7}{2} - 4 ≥ \frac{3}{2} n^{2} ≥ n^{2} 23n2+27423n2n2

寻找上界:32n2+72−4≤32n2+72+n2=6n2\frac{3}{2} n^{2} + \frac{7}{2} - 4 ≤ \frac{3}{2} n^{2} + \frac{7}{2} + n^{2} = 6n^{2} 23n2+27423n2+27+n2=6n2

所以存在 c1 = 1,c2 = 6,n0 = 2,使得上式成立,存在渐进紧确界,才可以使用 θ(n2) 表示。

同理可得:

32n5+72n−10=θ(n5)\frac{3}{2} n^{5} + \frac{7}{2}n - 10 = \theta(n^{5}) 23n5+27n10=θ(n5)

n3+n2+n=θ(n3)n^{3} + n^{2} + n = \theta(n^{3}) n3+n2+n=θ(n3)


2.2渐进上界 (O记号)

渐进上界使我们算法分析最常用的方式,因为当我们评价一个算法的优劣时,一般都去找它的最差情况,那么这个就是渐进上界。(大O记法)

先看定义:
在这里插入图片描述


举例

cosn=O(1)cos n = O(1) cosn=O(1)

因为 cos n 最大取1,所以是O(1)。

n22−12n=O(n2)\frac{n^{2}}{2} - 12n = O(n^{2}) 2n212n=O(n2)

通过画坐标图来看,很明显 n2 更大,所以上界为O(n)。

log7n=log2nlog27=O(log2n)=O(logn)log_{7} n = \frac{log_{2}n}{log_{2}7} = O(log_2{n}) = O(logn) log7n=log27log2n=O(log2n)=O(logn)

使用换底公式进行求解。

对于一般的式子来说我们只需要去掉系数取最高项即可,对于特殊的函数我们才会去找他≤什么。


2.3渐进下界 (Ω记号)

渐进下界就是最好情况,一般不使用它来衡量算法的优劣。

它的定义如下:

在这里插入图片描述


举例

n3−2n=Ω(n3)n^{3} - 2n = Ω(n^{3}) n32n=Ω(n3)

n2+n=Ω(n2)n^{2} + n = Ω(n^{2}) n2+n=Ω(n2)

同理对于普通的式子,直接去掉系数取最高阶项,遇到复杂的例如调和级数等,我们才会去找他≥什么。


3.常用的换算公式

O(f(n))+O(g(n))=O(max{f(n),g(n)})O(f(n)) + O(g(n)) = O(max \left \{f(n),g(n)\right \}) O(f(n))+O(g(n))=O(max{f(n),g(n)})

O(f(n))+O(g(n))=O(f(n)+g(n))O(f(n)) + O(g(n)) = O(f(n)+g(n)) O(f(n))+O(g(n))=O(f(n)+g(n))

O(f(n))∗O(g(n))=O(f(n)∗g(n))O(f(n))*O(g(n)) = O(f(n)*g(n)) O(f(n))O(g(n))=O(f(n)g(n))

O(c∗f(n))=O(f(n))O(c*f(n)) = O(f(n))O(cf(n))=O(f(n))

O(f(n))+θ(f(n))=θ(f(n))O(f(n)) + \theta(f(n)) = \theta(f(n)) O(f(n))+θ(f(n))=θ(f(n))


3.1举例证明

证明:O(f(n))+θ(f(n))=θ(f(n))O(f(n)) + \theta(f(n)) = \theta(f(n)) O(f(n))+θ(f(n))=θ(f(n))

设:O(f(n))=h(n),θ(f(n))=g(n)O(f(n)) = h(n), \theta(f(n)) = g(n) O(f(n))=h(n),θ(f(n))=g(n)
注:h(n)和g(n)是不同的函数{\color{Red}注:h(n)和g(n)是不同的函数} h(n)g(n)
所以有:
O(f(n))=h(n)=>∃c1,n0>0,∀n≥n0:0≤h(n)≤c1f(n)O(f(n)) = h(n) => \exists c_{1},n_{0}>0, \forall n\ge n_{0}:0\le h(n) \le c_{1}f(n) O(f(n))=h(n)=>c1,n0>0nn00h(n)c1f(n)
θ(f(n))=g(n)=>∃c2,c3,n1>0,∀n≥n1:c2f(n)≤g(n)≤c3f(n)\theta(f(n)) = g(n) => \exists c_{2},c_{3},n_{1}>0, \forall n\ge n_{1}:c_{2}f(n)\le g(n) \le c_{3}f(n) θ(f(n))=g(n)=>c2,c3,n1>0nn1c2f(n)g(n)c3f(n)

得出:
∀n≥max{n0,n1}:c2f(n)≤h(n)+g(n)≤max{c1,c3}f(n)\forall n \ge max \left \{ n_{0},n_{1} \right \} :c_{2}f(n) \le h(n)+g(n) \le max \left \{ c_{1},c_{3} \right \}f(n)nmax{n0,n1}:c2f(n)h(n)+g(n)max{c1,c3}f(n)

即:O(f(n))+θ(f(n))=θ(f(n))得证O(f(n)) + \theta(f(n)) = \theta(f(n)) 得证O(f(n))+θ(f(n))=θ(f(n))


推荐阅读
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨如何设计一个安全的加密和验证算法,确保生成的密码具有高随机性和低重复率,并提供相应的验证机制。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 在给定的数组中,除了一个数字外,其他所有数字都是相同的。任务是找到这个唯一的不同数字。例如,findUniq([1, 1, 1, 2, 1, 1]) 返回 2,findUniq([0, 0, 0.55, 0, 0]) 返回 0.55。 ... [详细]
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 深度学习理论解析与理解
    梯度方向指示函数值增加的方向,由各轴方向的偏导数综合而成,其模长表示函数值变化的速率。本文详细探讨了导数、偏导数、梯度等概念,并结合Softmax函数、卷积神经网络(CNN)中的卷积计算、权值共享及池化操作进行了深入分析。 ... [详细]
author-avatar
三喜金融
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有