数据结构(2)时间复杂度——渐进时间复杂度、渐进上界、渐进下界

2023-11-18

目录

2.1.概述

2.2.时间复杂度的计算

2.2.1.渐进复杂度

2.2.2.渐进上界

2.2.3.渐进下届

2.2.4.复杂度排序

2.2.5.举几个例子


2.1.概述

算法的基本定义:

求解问题的一系列计算或者操作。

衡量算法性能的指标:

  • 时间复杂性
  • 空间复杂性

这两个指标里最有用的是时间复杂度,平时谈的算法复杂度一般指的就是时间复杂度。

空间复杂性:

算法执行所用的空间。

时间复杂性:

用time的缩写T表示算法执行所需要的时间,这里的时间指的不是传统意义上时分秒的时间,而是将一步操作抽象成一个单位时间,所以算法的时间复杂度里的时间可以理解为所要执行的步骤的数量,即操作次数。

时间复杂性分为,最好时间复杂性、最坏时间复杂性、平均时间复杂性。这里面最有用的指标是最坏时间复杂性,它标识了一个算法执行的最差效率,要是它是能接受的,那么这个算法的执行效率就不用担心了。

2.2.时间复杂度的计算

2.2.1.渐进复杂度

时间复杂度是随输入规模变化而变化的一个值,这种关系不难看出是一个函数关系,所以时间复杂度的计算其实就是推导出当前算法和输入规模之间的这个关系函数。这个关系函数可以是根据算法的具体步骤一步步相加最后推到出来的详细的一个函数表达式,但是其实我们知道时间复杂度函数一定是一个自变量为输入规模n的单调递增的一元函数。这种单调递增函数当自变量趋近于无穷大(即+∞)时,函数表达式里的常数项和阶数不是最高的项对变化来说是可以忽略不记的,所以我们用渐进复杂度就可以表示当输入规模趋于无穷大时候的时间复杂度。

渐进复杂性是算法复杂度的一种简化表示,即算法的复杂度可以表示为当输入规模趋于+∞时,变化最快的部分。假设T(n)是算法的时间复杂度函数,t(n)是算法的渐进复杂度,可以得到以下等式:

以上等式之所以成立不难推出,因为t(n)是T(n)中变化最快的部分,T(n)减去变化快的部分与T(n)的比值必然是随着n趋近于∞的时候,趋近于0的。

2.2.2.渐进上界

渐进上界,即当前算法在输入规模趋近于+∞时,时间复杂度不会超过的一个函数值。用大O表示,这种表示是抽象的、简介的、只保留重点因素的,一般我们说算法复杂度说的就是大O表示的渐进时间复杂度的上界。

渐进上界的定义:

设f和g是定义为自然数集N上的函数,若存在正数c和n0,使得对一切n≥n0有:

0≤f(n)≤cg(n)

成立,则称f(n)的渐进上界是g(n),记作:

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

2.2.3.渐进下届

下界,即当前算法在输入规模趋近于+∞时,前算法运行时间的下限,采用大Ω符号来表示。

渐进上界的定义:

设f和g是定义为自然数集N上的函数,若存在正数c和n0,使得对一切n≥n0有:

0≤cg(n)≤f(n)

成立,则称f(n)的渐进下界是Ω(n),记作:

f(n)=Ω(g(n))

2.2.4.复杂度排序

算法的时间复杂度最后表示出来一定是一个自变量为输入规模n的一元函数,这个一元函数还一定是个基本初等函数,基本初等函数无非就六种,所谓的复杂度排序其实也就是六种基本初等函数在自变量趋近于无穷大时的变化率:

常数级、对数级、线性级、多项式级是能接受的范围,

指数级、阶乘级是灾难性的。

2.2.5.举几个例子

O(N)的时间复杂度:

for(i=1; i<=n; ++i)
{
   j = i;
   j++;
}

O(logN)的时间复杂度:

int i = 1;
while(i<n)
{
    i = i * 2;
}

O(n²) 的时间复杂度:

for(x=1; i<=n; x++)
{
   for(i=1; i<=n; i++)
    {
       j = i;
       j++;
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构(2)时间复杂度——渐进时间复杂度、渐进上界、渐进下界 的相关文章

随机推荐

  • ASP.NET中上传文件到数据库

    介绍 为什么要将文件保存到数据库呢 理由很多 最直接的就是 将文件放入数据库以后 可以对文件进行更好的管理 特别是文本文件 图片等 如果不使用数据库 数量巨大的时候 很难做到有效的管理和区别 特别是需要作一些与文字密切相关的应用的时候 将文
  • Python3使用urllib访问网页

    介绍 改教程翻译自python官网的一篇文档 urllib request是一个用于访问URL 统一资源定位符 的Python模块 它以urlopen函数的形式提供了一个非常简单的接口 可以访问使用多种不同协议的URL 它也提供了一个稍微复
  • 通过Nginx(basic auth)实现Prometheus账号密码登录

    一 原因 因客户Red Hat 7 5服务器安装部署grafana无法添加prometheus数据源 以及无法修改初始密码 为确保环境访问安全 特别研究通过账号密码认证访问prometheus 搜索了很多资料 但都缺这缺那 所以我这里记录下
  • AppStore 提审时的“出口合规证明”处理

    对于加密的管理 Apple不比之前严格了 一般选 否 也能通故审核 每次提交审核的时候都会让确认是否使用了Apple以的加密算法 在窗口提示了我们可以看到 可以在Xcdoe的info plist文件中增加App Uses Non Exemp
  • 众多Android 开源项目推荐,给力工作给力学习

    FBReaderJ FBReaderJ用于Android平台的电子书阅读器 它支持多种电子书籍格式包括 oeb ePub和fb2 此外还支持直接读取zip tar和gzip等压缩文档 项目地址 http www fbreader org F
  • jFinal框架下controller接参

    一 表单参数 1 前端 contentType x www form urlencoded 2 apipost接口测试 3 controller接参 1 注解 getPara获取参数 2 注解 默认参数 若方法的参数名为注解名 则jFina
  • Python 基础知识

    进阶选手 Python 进阶知识 Aimin20210819的博客 关注VXG AIMIN2020 更多 目录 1 Python 是怎么理解 2 Python数据类型 四种数据类型
  • 在Firefox浏览器中导入Burp Suite证书

    在日常的渗透中 经常就是在浏览器用bp来抓包 在配置完浏览器的代理的时候就会涉及CA证书问题 在设置完代理后 再访问百度时 就会出现如下图的问题 第一步 导出证书 打开burp suite 找到 代理 Proxy 在选择 选项 Option
  • 指针加法:c = (int *) ((char *) c + 1)与 c=c+1 的区别

    示例代码 include
  • Qt通过QSttings类读取*.ini配置文件

    目录 ini文件 什么是ini文件 格式 需要的参数 需要了解的API 单例 单线程实例 多线程实例 设计一个读取ini文件的类 AppSettings类 ini文件 什么是ini文件 INI Initialization File 是微软
  • DTO和POJO实体类之间值映射

    package cn test util import java lang reflect Method import java util List public class AutoMapper public static
  • Git:Git中的远程操作和标签管理--分布式版本控制系统

    文章目录 理解分布式版本控制系统 克隆仓库 远程推送 拉取远程仓库 配置Git 标签管理 本篇主要总结关于Git中远程操作的相关事项 理解分布式版本控制系统 在进行远程操作前 首先要理解什么是分布式版本控制系统 理解这个问题时要思考这样的问
  • 从均值方差到有效前沿

    这篇文章的主要目的是介绍有效前沿这个理论工具和分析框架 我们由均值方差分析展开 逐步推演到有效前沿 然后 我们又说到有效前沿在投资或者量化中的应用场景 最后我们也总结了有效前沿的一些问题 尤其是敏感性问题 在教程中 特意加入了一些实验代码
  • 学习日记——物联网云平台组件(云消息的后续处理)

    百度云物联网组件图 设备通过MQTT等协议将数据上报到百度云平台 百度云通过主题来将设备分发给其他设备 并且可以通过规则引擎来将数据发送给时序数据库对象存储等等其他云服务 来实现我们想要的各种功能 规则引擎 一 规则引擎简介 使用规则引擎功
  • [qiankun]实战问题汇总

    qiankun 实战问题汇总 ERROR SyntaxError Cannot use import statement outside a module 问题分析 解决方案 子应用命名问题 问题分析 解决方案 jsonpFunction
  • 你的Siri收集了你的个人数据?联邦学习介绍

    MIT Technology Review Apple Siri 这是 MIT Technology Review 12月11日的 Newsletter 的部分摘录 大概意思是 iPhone 上的 Siri 在听到我们个人说 Hey Sir
  • 集群分布式quartz的需要的表

    集群分布式quartz的需要的表 集群分布式quartz一共需要的11张表 select from QRTZ FIRED TRIGGERS select from QRTZ PAUSED TRIGGER GRPS select from Q
  • NDK错(二)

    提示 No version of NDK matched the requested version 21 0 6113669 Versions available locally 22 1 7171670 23 0 7421159 方案一
  • 用执行计划看SQL的索引命中情况

    SQL Server查询超时 用执行计划看SQL的索引命中情况 从SQL Server查询语句 查询超时 需要优化 以下只优化方案之一 仅供参考 选中某段SQL后按CTRL L 查看执行计划 找出哪些表用了全局查询 选中某表按ALT F1
  • 数据结构(2)时间复杂度——渐进时间复杂度、渐进上界、渐进下界

    目录 2 1 概述 2 2 时间复杂度的计算 2 2 1 渐进复杂度 2 2 2 渐进上界 2 2 3 渐进下届 2 2 4 复杂度排序 2 2 5 举几个例子 2 1 概述 算法的基本定义 求解问题的一系列计算或者操作 衡量算法性能的指标