算法性能分析

news2024/9/20 6:06:12

一、时间复杂度分析

1.什么是时间复杂度

  时间复杂度是一个函数,它定性描述该算法的运行时间。我们在软件开发中,时间复杂度就是用来方便开发者估算出程序运行的答题时间。

  那么该如何估计程序运行时间呢,通常会估算算法的操作单元数量来代表程序消耗的时间,这里默认CPU的每个单元运行消耗的时间都是相同的。假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))。

2.什么是大O

  算法导论给出的解释:大O用来表示上界的,当用它作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界。

  同样算法导论给出了例子:拿插入排序来说,插入排序的时间复杂度我们都说是O(n^2) 。输入数据的形式对程序运算时间是有很大影响的,在数据本来有序的情况下时间复杂度是O(n),但如果数据是逆序的话,插入排序的时间复杂度就是O(n2),也就对于所有输入情况来说,最坏是O(n2) 的时间复杂度,所以称插入排序的时间复杂度为O(n2)。同样的同理再看一下快速排序,都知道快速排序是O(nlogn),但是当数据已经有序情况下,快速排序的时间复杂度是O(n2) 的,所以严格从大O的定义来讲,快速排序的时间复杂度应该是O(n^2)。
在这里插入图片描述

3.不同数据规模的差异

如下图中可以看出不同算法的时间复杂度在不同数据输入规模下的差异。
在这里插入图片描述
  在决定使用哪些算法的时候,不是时间复杂越低的越好(因为简化后的时间复杂度忽略了常数项等等),要考虑数据规模,如果数据规模很小甚至可以用O(n^2)的算法比O(n)的更合适(在有常数项的时候)。

  就像上图中 O(5n^2) 和 O(100n) 在n为20之前 很明显 O(5n^2)是更优的,所花费的时间也是最少的。那为什么在计算时间复杂度的时候要忽略常数项系数呢,也就说O(100n) 就是O(n)的时间复杂度,O(5n^2) 就是O(n^2)的时间复杂度,而且要默认O(n) 优于O(n^2) 呢 ?

  这里就又涉及到大O的定义,因为大O就是数据量级突破一个点且数据量级非常大的情况下所表现出的时间复杂度,这个数据量也就是常数项系数已经不起决定性作用的数据量。例如上图中20就是那个点,n只要大于20 常数项系数已经不起决定性作用了。

  所以我们说的时间复杂度都是省略常数项系数的,是因为一般情况下都是默认数据规模足够的大,基于这样的事实,给出的算法时间复杂的的一个排行如下所示:
在这里插入图片描述

4.复杂表达式的化简

有时候我们去计算时间复杂度的时候发现不是一个简单的O(n) 或者O(n^2), 而是一个复杂的表达式,例如:

O(2*n^2 + 10*n + 1000)

去掉运行时间中的加法常数项 (因为常数项并不会因为n的增大而增加计算机的操作次数)。

O(2*n^2 + 10*n)

去掉常数系数

O(n^2 + n)

只保留保留最高项,去掉数量级小一级的n (因为n^2 的数据规模远大于n),最终简化为:

O(n^2)

所以最后我们说:这个算法的算法时间复杂度是O(n^2) 。

5.O(logn)中的log是以什么为底

平时说这个算法的时间复杂度是logn的,那么一定是log 以2为底n的对数么?其实不然,也可以是以10为底n的对数,也可以是以20为底n的对数,但我们统一说 logn,也就是忽略底数的描述。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/535750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10个顶级AI艺术生成器

人工智能 (AI) 不仅影响商业和医疗保健等行业。 通过开创人工智能生成艺术的新时代,它还在创意产业中发挥着越来越重要的作用。 人工智能技术和工具通常可供任何人广泛使用,这有助于创造全新一代的艺术家。 我们经常听说人工智能将自动化或接管所有人类…

Java中的正则表达式详解

文章和代码已经归档至【Github仓库:https://github.com/timerring/java-tutorial 】或者【AIShareLab】回复 java 也可获取。 文章目录 正则表达式为什么要学习正则表达式再提出几个问题解决之道-正则表达式正则表达式基本介绍介绍 正则表达式底层实现实例分析 正则…

Word控件Aspose.Words教程:设置图表数据标签的默认选项

Aspose.Words是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API支持流行文件格式处理,并…

新星计划2023【网络应用领域基础】————————Day4

常见的网络基础介绍 前言 我们学习了一些基础的网络协议,以及子网掩码和vlan,同时也做了个简单的单臂路由实验 这篇文章我将仔细的讲解单臂路由的应用和交换机二层接口类型,以及wireshark的教程。 一,交换机二层接口 交换机的二…

Everypixel: AI图片搜索引擎

【产品介绍】 Everypixel是一个基于人工智能的图片搜索引擎。可以搜索超过 50 个图片来源的优质的授权图库版权素材图片,还可以使用免费图案功能,找到适合自己需求的可定制无缝图案。 Everypixel利用深度学习和计算机视觉技术,为客户提供先进…

Taro小程序配置网络请求

目录 1. 创建目录结构2. 全局通用的config的变量配置3. 配置http网络请求4. 使用 1. 创建目录结构 在 src 目录下新建 service 目录,目录下创建 api 和 http 子目录在 src 目录下新建 config 配置文件 2. 全局通用的config的变量配置 在 config 文件中添加一下代…

日本进口Hioki IM3536 LCR测试仪

Hioki IM3536 LCR测试仪 测量频率DC,4Hz~8MHz 测量时间:最快1ms 基本精度:0.05% rdg 1mΩ以上的精度保证范围,也可安心进行低阻测量 可内部发生DC偏压测量 从研发到生产线活跃在各种领域中 测量频率4Hz~8MHz,精度…

【pyq文案】可可爱爱、脑回路清奇の朋友圈文案

1.人每一个身体器官都是无价之宝,全部加起来1个月3000 2.别人出门:辣妹风、复古风、学院风;我出门:打工的勤劳小蜜蜂 3.看见自己就烦,50出;和今天星期四没关系 4.上学时拿钱混日子,上班后拿日…

种子轮、天使轮等相关知识

我们可以通过查询企业的相关工具网站,查看企业是否上市、独角兽、瞪羚企业、上市企业等情况。 转载: https://zhuanlan.zhihu.com/p/565389690 科创板挂牌不属于上市,企业在挂牌之后要经过协会核准后可以进行股份登记挂牌,大概需要…

【Redis】Redis 命令之 Hash

文章目录 ⛄介绍⛄命令⛄RedisTemplate API⛄应用场景 ⛄介绍 Hash类型,也叫散列,其value是一个无序字典,类似于Java中的 HashMap 结构。 String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便&#xf…

java服务-常用技术-生僻函数、方法、技巧

一、字符串操作 1. 需要转义的字符 java字符串中需要转义的特殊字符1. \n 表示换行;2. \t 表示制表符,相当于Table键;3. \ 表示单引号;4. \" 表示双引号;5. \\ 表示一个斜杠“\”。 2. split第二个参数limit的用…

Dynamics 365 DevOps CI/CD之WebResource

对于D365自身的发布,简单点来说就是Solution的发布,复杂一些会涉及周边集成接口等一系列的发布。如果是单纯的Solution的发布的Azure DevOps商店里有很多工具,比如Power DevOps Tools,这个我之前也有博文转载过相关文章&#xff0…

史上最通俗易懂的EWMA(指数加权移动平均)的参数解释以及程序代码

文章目录 一、EWMA(指数加权移动平均)是什么?二、详细的参数解释3、使用Python pandas库中的ewm()函数实现指数加权移动平均(EWMA)的示例代码总结 一、EWMA(指数加权移动平均)是什么&#xff1f…

抢跑智驾AI芯片「新路径」

“胆量”这个词,被后摩智能创始人兼CEO吴强着重提及。 5月10日,后摩智能发布首款存算一体智驾芯片鸿途™H30,以12nm制程实现最高物理算力 256TOPS,典型功耗 35W,成为国内率先落地存算一体大算力 AI 芯片的公司。即&am…

多线程的最最简单的基本了解

引言: 在学习完常规的语法后,我们将进入下一步的学习,而多线程则是被大多数人认为的下一步的学习目标,因为在有了基础的语法大框架后我们都有了对编程的一个基本的认知,而多线程则是开始有了一定的深度。 一、线程的基…

企业电子招标采购系统源码之传统采购模式面临的挑战

采购类型多 采购制度:采购金额、部门、品类的差异导致管理标准不同。 采购流程:从供应商管理、寻源操作到合同签订、订单执行,业务流程长,审批节点多,传统管理透明度低,联动性差。 供应商管理难 寻源&#…

Aixcoder:AI辅助编程工具

【产品介绍】 aixcoder是一款基于深度学习人工智能技术的AI辅助编程工具。提供了一个由各个领域的专业代码训练出来的“虚拟编程专家”,通过与aixcoder进行结对编程,程序员可以感受到工作效率的显著提升。 借助aixcoder的帮助,程序员可以摆脱…

ChatGPT教程 基于Springboot+Spring+MybatisPlus实现gpt3.5接口开发

⛪ ChatGPT教程: 基于SpringbootSpringMybatisPlus实现gpt3.5接口开发 🚀 文章介绍: 本文基于SpringBootSpringMybatisPlus实现一个响应快速的gpt接口,可通过与前端整合开发对应的前端页面 🚀 源码获取: 项目中的资料可以通过文章底部小卡片获…

AutoSizer.exe:自动调整窗口大小的便捷工具

AutoSizer.exe是一款实用的桌面应用程序,它旨在帮助用户自动调整窗口大小,提供更好的用户体验。无论您是在使用Windows操作系统进行日常工作还是进行多任务处理,AutoSizer.exe可以简化您的工作流程,提高效率。本文将介绍AutoSizer.exe的下载地址、功能介绍、使用方法以及其…

国考省考行测:增长率,减少率,增长3倍,是3倍,比较增长率直接相除,能除就除,能减就减,看题三要素:时间,关键词,考点

国考省考行测:增长率,减少率,增长3倍,是3倍,比较增长率直接相除,能除就除,能减就减,看题三要素:时间,关键词,考点 2022找工作是学历、能力和运气…