大O表示法表示算法运行时间

大O表示法用来度量一个算法的运行时间。书写为O(n),其中n为一个算法所执行的操作次数。当我们讨论算法的运行时间时,说的是一个算法在给定的输入列表增加的情况下算法执行操作数的增速,也就是运行时间的增速。

二分查找算法

下面介绍两种简单的查找算法说明算法运行时间随输入数的增加的增速。

小明心里随便想了一个1~100之间的数字。

在这里插入图片描述

小强的目标是以最快的速度猜出小明想的数字,每次猜完以后小明会说大了、小了或是对了。

算法一:

从第一个数组开始猜,直到猜中为止,则猜测的过程是这样的。

在这里插入图片描述

这是简单查找,每次猜测从列表中排除一个数字,直到猜中为止。如果小明想的数字是99,那使用这种算法小强得猜99次才能猜到。

算法二:

在这里插入图片描述

小强从列表的中间位置开始猜(也就是50这个数字),小强说出是小了还是大了,此时可以排除一半的数字。从剩余的一半数字中重复上述操作,直到找出小明想的数字。这就是二分查找算法,算法一称为简单查找算法

通过使用二分查找算法,我们每猜一次就能在原有的数字列表上排除一半的数字。

算法运行时间的增速

在前面的例子中,如果列表有100个数字,使用简单查找我们最多需要猜100次;使用二分查找我们最多需要猜7次就能找到目标数字。假设猜一次所需要的执行时间是1秒,则简单查找需要花费100秒,二分查找仅需要7秒,简单查找所花费的时间相当于二分查找的15倍。

现在假设列表有40亿个数字,在这种情况下使用二分查找需要猜32次,前面我们曾得出结论,简单查找所花费的时间大约是二分查找的15倍,此时你可能会以为在输入列表为40亿的情况先简单查找需要猜32 * 15 = 480次,这是正确的吗?答案是错误的,列表中包含40亿个元素时,按照简单查找,从第一个元素开始最多需要猜40亿次。

为什么会这样呢,因为二分查找和简单查找算法的运行时间的增速不一样,也就是说随着元素的增加,简单查找算法所需的额外时间比二分查找算法所需的额外时间要多。因此,我们知道算法运行完毕所需的时间还不够,还需要知道算法的运行时间是如何随着元素的增加而增长。此时就需要用到大O表示法了。

大O表示法指明算法的运行速度。例如,列表有n个元素,使用简单查找算法最多需要n次查找,用大O表示法这个运行时间表示为O(n)。使用二分查找算法最多需要查找log n次,用大O表示法这个运行时间表示为O(log n)。请注意我们用的是最多,大O表示法表示的是算法在最糟糕的情况下的运行时间。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

锐捷设备密码管理、密码恢复、恢复出厂设置

目录 配置登录用户名密码以及Enable密码 只需要密码登录 需要用户名和密码登录(无AAA) 需要用户名和密码登录(有AAA) 密码恢复 Web密码忘记 Telnet/SSH密码忘记 Console密码忘记 所有密码都忘记,通过Console进…

Java GUI,mybatis实现资产管理系统

Java GUI——资产管理系统 前言:为了做java课设,学了一手Java GUI。感觉蛮有意思的,写写文章,做个视频记录一下。欢迎大家友善指出我的不足 资产管理系统录制视频,从头敲到尾 模块划分 资产信息管理 资产信息查询 …

SpringBoot在线失物招领系统

一个基于SpringBootSemanticUI的pc Web在线失物招领系统 http://localhost:8080/swzl/index 主页 http://localhost:8080/swzl/login 登录页 用户表user admin字段为true是管理员 false用户 springboot2.3 springmvc mybatis html ajax idea 或eclipse maven mys…

【Linux进行时】进程概念

进程的概念 什么是进程呢? ❓首先我们需要认识一下什么叫进程呢? 课本概念:程序的一个执行实例,正在执行的程序等 🔥内核观点:担当分配系统资源(CPU时间,内存)的实体。…

SpringBoot06---前端路由VueRouter

单页面应用,意思是只有一个html,变化的内容是不同组件进行切换,每个组件加载网络请求,渲染对应的数据,这个内容就是学习怎么完成组件切换 以网易云音乐为例: 网易云音乐 (163.com) 现在无需注册&#xf…

springBoot的日志文件

日志是程序的重要组成部分,主要可以用来定位和排查问题。除此之外,还可以用来: 1. 记录用户的登录日志,方便分析用户是正常登录还是恶意破解; 2. 记录系统的操作日志,方便数据恢复和定位操作人;…

docker 安装elasticsearch、kibana

下载es镜像 docker pull elasticsearch 启动es容器 docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -d elasticsearch 验证es界面访问 ​​​​​http://节点ip:9200/ ​…

leetcode 416. 分割等和子集

2023.8.12 太难了ToT.... 一题做了一个下午。 本题是动规题目的0-1背包问题系列。将分割子集转化为 在nums数组中任取任意元素使其和等于总元素和的一半,即可满足题目条件。 1、使用一个bool型二维dp数组,dp[i][j] 的含义是:任取nums数组在索…

已有公司将ChatGPT集成到客服中心以增强用户体验

Ozonetel正在利用ChatGPT来改善客户体验。该公司表示,他们通过使用ChatGPT收集与客户互动过程收集的“语料”能够更有针对性地提高服务效率,提供个性化的用户体验,并实现更高的客户满意度。[1] 通过这套解决方案,客服中心将拥有一…

27.Netty源码之FastThreadLocal

highlight: arduino-light FastThreadLocal FastThreadLocal 的实现与 ThreadLocal 非常类似,Netty 为 FastThreadLocal 量身打造了 FastThreadLocalThread 和 InternalThreadLocalMap 两个重要的类。下面我们看下这两个类是如何实现的。 FastThreadLocalThread 是对…

c++文件流详细笔记

c++流 IO :向设备输入数据和输出数据 C++的IO流 设备: 文件控制台特定的数据类型(stringstream)c++中,必须通过特定的已经定义好的类, 来处理IO(输入输出) 文件流 文件流: 对文件进行读写操作 头文件: 类库: ifstream 对文件输入(读文件) ofstream 对文件输出(写…

idea中如何处理飘红提示

idea中如何处理飘红提示 在写sql时,总是会提示各种错误 查找资料,大部分都是说关提示,这里把错误提示选择为None即可 关掉以后,也确实不显示任何提示了,但总有一种掩耳盗铃的感觉 这个sms表明明存在,但是还…

深度学习常用的python库学习笔记

文章目录 数据分析四剑客Numpyndarray数组和标量之间的运算基本的索引和切片数学和统计方法线性代数 PandasMatplotlibPIL 数据分析四剑客 Numpy Numpy中文网 ndarray 数组和标量之间的运算 基本的索引和切片 数学和统计方法 线性代数 Pandas Pandas中文网 Matplotlib Mat…

MuMu模拟器运行一段时间后Device.Present耗时突然上升

1)MuMu模拟器运行一段时间后Device.Present耗时突然上升 2)​如何在运行过程中获得温度信息 3)Input System鼠标更换主按键的Bug 4)如何禁止Unity向https://config.uca.cloud.unity3d.com发送设备信息 这是第347篇UWA技术知识分享…

Leetcode-每日一题【剑指 Offer 26. 树的子结构】

题目 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B: 4 / 1 返回 true&#xff0…

C++笔记之静态成员函数的使用场景

C笔记之静态成员函数的使用场景 C静态成员函数的核心特点是不与特定类实例相关,可通过类名直接调用,用于执行与类相关的操作而无需创建类对象。其主要用途是在类级别上共享功能,管理全局状态或提供工具函数。 code review! 文章目录 C笔记之…

悬崖传感器调试问题总结

悬崖传感器原理 使用ADC采样电路,周期的进行开/关灯,获取ADC采样值。根据预先设置好ADC门限,判断是否为悬崖。ADC的精度是12位,对应电路的电压是3.3伏,悬崖传感器通过开灯和关灯,接收的不同灯光强度&#x…

[数据集][目标检测]道路坑洼目标检测数据集VOC格式1510张2类别

数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1510 标注数量(xml文件个数):1510 标注类别数:2 标注类别名称:["keng","…

Redis缓存设计

缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要。但是将缓存加入应用架构后也会带来一些问题,本文将针对这些问题介绍缓存使用技巧和设计方案。 1缓存的收益和成本 下图左侧为客户端直接调用存储层的架…

vector【1】介绍与使用(超详解哦)

vector 引言vector介绍接口使用默认成员函数迭代器容量元素访问数据修改 总结 引言 在string部分,我们详细的介绍了各个接口的使用,虽然其不属于STL的一部分,但是接口与STL中的容器相似,所以我们在学习使用vector等STL容器的使用…