寻找最大元素的时间复杂度分析

2023-11-26

我遇到了一个家庭作业问题:

其中哪一个是最佳算法最佳情况运行时间的渐近紧上限,该算法在任意大小的整数数组中查找最大元素n

  1. O(log n)
  2. O(n2)
  3. O(n)
  4. O(1)
  5. O(n log n)

根据我的理解,它是 O(n) 因为即使这是最好的情况我们仍然需要 扫描 arr 以获得结果。请纠正我


对,那是正确的。看到这一点的一种方法是通过对抗性论证。假设您有一个算法,据称可以找到数组中的最大值,但不会至少检查每个数组元素一次。

Suppose I run your algorithm on some array A1 that consists of nothing but the number 0. Since your algorithm doesn't look at all positions in the array, there's some position it doesn't look at; call that position k. Now, define A2 to be an array that's the same as array A1, except that the element at position k in A2 is defined to be 1.

Now, what happens if I run your algorithm on A2? Since your algorithm never looked at position k in A1 and A2 is identical to A2 except at position k, your algorithm can't tell A1 and A2 apart. Therefore, whatever it says for A1 must be the same as what it says for A2.

That's a problem, though. If your algorithm says that the maximum value is 0, then it's wrong for A2, whose max is 1. If your algorithm says that the maximum value is 1, then it's wrong for A1, whose max is 0. Therefore, the algorithm has to be wrong in at least one case, so it can't be a correct algorithm for finding the maximum value.

该参数表明,任何始终找到数组中最大值的确定性算法都必须查看该数组中的所有位置,因此运行时间必须为 Ω(n) 才正确。

希望这可以帮助!

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

寻找最大元素的时间复杂度分析 的相关文章

  • 如何验证无锁算法?

    从理论上讲 至少应该可以对无锁算法进行暴力验证 只有这么多的函数调用组合 是否有任何工具或正式推理过程可以实际证明无锁算法是正确的 理想情况下它还应该能够检查竞争条件和 ABA 问题 注意 如果你知道一种方法来证明一点 例如 只证明它不受
  • 比 in_array 更快?

    我需要将一个值与一组数组进行比较 但是 我需要比较 foreach 中的多个值 如果使用 in array 它可能会很慢 非常慢 有没有更快的替代方案 我当前的代码是 foreach a as b in array b array 谢谢 你
  • Dijkstra 算法不生成最短路径?

    我正在使用 Dijkstra 算法解决最短路径问题 我遇到了麻烦 因为该算法应该提供最短路径 但运行该算法后 我手动得到了一条短路路径 这只是该算法的副产品吗 我尝试生成的路径是从 a gt z 这是我通过应用该算法得到的路径 在我访问的每
  • 什么是确定性快速排序?

    我一直在阅读有关快速排序的内容 发现有时它被称为 确定性快速排序 这是普通快速排序的替代版本吗 普通快速排序和确定性快速排序有什么区别 普通 确定性 快速排序在特定数据集上的行为可能非常差 例如 选择第一个未排序元素的实现在已排序数据上的时
  • Python:for 循环 - for i in range(0,len(list) 与 for i in list

    这是一个非常简单的Python 力学问题 为什么我不能只说 for i in range original list 而不是 for i in range 0 len original list 人们通常使用范围而不是前者吗 谢谢 If I
  • 优化 HTML 属性压缩顺序

    我在某处读到 按一定顺序组织 HTML 属性可以提高 HTML 文档的压缩率 我想我是从 Google 或 Yahoo 推荐的更快网站上读到这篇文章的 如果我没记错的话 建议是将最常见的属性放在第一位 例如id等 然后将其余的按字母顺序排列
  • 找到不(必要)与二进制矩阵中的图像边界对齐的最大矩形

    我在用这个解决方案 https stackoverflow com questions 2478447 find largest rectangle containing only zeros in an nn binary matrix在
  • 识别鼠标移动的算法

    我想知道是否有任何研究 算法可以指定鼠标在识别 等字符时的偏差量使用鼠标绘制 某种光学字符识别 但可能是一个更简单的版本 是否有某种算法可以让我说用户绘制的问号确实是一个问号 而不是其他具有一定准确性的东西 就像 Windows 平板电脑软
  • 为什么《破解编码面试》这个例子的时间复杂度是O(k c^k)?

    该问题来自 破解编码面试 第 6 版 问题 V1 11 以下代码打印长度为 k 的所有字符串 其中字符 是按排序顺序排列的 它通过生成所有长度的字符串来做到这一点 k 然后检查每个是否已排序 什么是运行时间 package QVI 11 P
  • 使用 Numba 加速矢量距离计算

    以下是我为 3 D 环形几何中的距离 平方 计算编写的一些函数 用于该 3 D 空间中的粒子集合 import itertools import time import numpy as np import scipy import num
  • 运行时间为 O(n) 且就地排序的排序算法

    有没有运行时间为O n 并且还分类到位 在某些情况下 最好的情况是 O n 但这可能是因为项目集合已经排序 你正在看 O nlogn 一些较好的平均值 话虽如此 排序算法的 Wiki 还是相当不错的 有一个表格比较了流行的算法 说明了它们的
  • 如何检查无向图是否有奇数环

    我试图找到一个 O V E 时间算法来检查是否已连接 无向图有或没有奇数环 我正在考虑对图进行广度优先搜索 并尝试将顶点标记为黑色和白色 以便没有两个标记为相同颜色的顶点相邻 是否有任何已知的更简洁的算法可以在线性时间内解决这个问题 你的方
  • 当平方和为N时,如何找到四个变量的所有可能值?

    A 2 B 2 C 2 D 2 N给定一个整数N 打印出整数值的所有可能组合ABCD求解方程 我猜我们可以比暴力做得更好 天真的暴力会是这样的 n 3200724 lim sqrt n 1 for a 0 a lt lim a for b
  • Google 文档如何处理编辑冲突?

    我一直在尝试编写自己的 Javascript 编辑器 其功能类似于 Google Docs 允许多人同时使用 我不明白一件事 假设用户 A 和用户 B 直接相互连接 网络延迟为 10 毫秒 我假设编辑器使用 diff 系统 据我了解 Doc
  • 简单的排名算法

    我需要创建一个民意调查 按照项目的好坏顺序创建一个排名列表 我打算向每个用户展示两个项目 让他们选择一个他们认为更好的项目 然后多次重复这个过程 它有点类似于您在社交网络电影 我应该如何根据收到的答案对项目进行排名 看着那 这ELO国际象棋
  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • 自动跟踪算法

    我正在尝试写一个simple跟踪例程来跟踪电影中的某些点 本质上我有一系列 100 帧长的电影 在黑暗背景上显示一些亮点 我每帧有大约 100 150 个点 它们在电影的过程中移动 我想跟踪它们 所以我正在寻找一些有效的 但可能不会过度实施
  • 分而治之算法找到两个有序元素之间的最大差异

    给定一个整数数组 arr 找出任意两个元素之间的差异 使得较大的元素出现在 arr 中较小的数字之后 Max Difference Max arr x arr y x gt y 例子 如果数组是 2 3 10 6 4 8 1 7 那么返回值
  • 当给定块大小时反转单链表

    有一个单连接链表 并给出了块大小 例如 如果我的链表是1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 gt 8 NULL我的块大小是4然后反转第一个4元素 然后是第二个 4 个元素 问题的输出应该是4 gt 3 gt 2 g
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进

随机推荐

  • Facebook Graph API (#190) 必须使用页面访问令牌调用此方法

    我通过 Facebook Graph API 从 Facebook 洞察中获取数据已有一年多了 最近开始了我所有的请求 比如 id insights 返回错误 190 This method must be called with a Pa
  • OpenSSL:无法使用 SSL_CTX_new() 创建 SSL_CTX *

    按照以下说明进行操作page 我正在尝试使用 openSSL 以安全的方式连接客户端 服务器 我无法创建 SSL CTX 如下所示 OpenSSL headers include openssl bio h include openssl
  • 在 ScrollView 中使用 onTouchListener 检测滑动

    我使用以下代码来检测活动中的滑动 getWindow getDecorView getRootView setOnTouchListener new OnTouchListener Override public boolean onTou
  • 使用 Python etree 更新 XML 元素和属性值

    我正在尝试使用Python 2 7ElementTree库来解析 XML 文件 然后用测试数据替换特定元素属性 然后将其保存为唯一的 XML 文件 我的解决方案的想法是 1 通过将文件读取为字符串来从 CSV 文件中获取新数据 2 在某些分
  • 使用相同代码但不同类型的重构方法

    我有几种方法可以做同样的事情 当与 MySQL 数据库连接时 保存或加载不同类型的参数 目前 我对每种类型都有不同的方法 如何组合这些方法以便它们支持不同的类型 下面是两个非常相似但使用不同类型的方法的示例 public static vo
  • 使用 Javascript 与 SQL 服务器握手

    我想尝试 作为学习练习 让我的 javascript 与 sql 聊天 var ws new WebSocket ws 127 0 0 1 1433 似乎没有被阻止的端口 所以理论上它应该可以工作 我正在寻找如何与 sql 服务器握手并与其
  • 显示带有嵌套 ListView 的 IGrouping<>

    我需要从数据访问层检索一组 Widget 按 widget Manufacturer 分组 以显示在一组嵌套的 ASP NET ListView 中 问题是 据我所知 嵌套 ListView 方法要求我在使用数据之前对数据进行整形 而且我无
  • 如何插入、更新和删除日历和事件

    有没有办法添加 删除和更新日历 和 有没有办法在日历中添加 删除和更新事件 Thanks 检查这个代码http code google com p android calendar provider tests source browse
  • AWS 安全组 - EC2 到 RDS

    我想问一下如何将 EC2 连接到 AWS 中的 RDP 我已将 EC2 安全组 包含 EC2 实例 添加到默认 RDP 组中 并且数据正在流动 连接正常 EC2 安全组已启用端口 80 至 0 0 0 0 0 并通过 SSH 连接到我的 I
  • 错误:不变违规:dangerouslyRenderMarkup(...):无法在工作线程中渲染标记

    设置状态导致第二次渲染后反应测试失败 到目前为止 JSDOM 和 Mocha 的测试进展顺利 到目前为止 还没有必要测试任何改变其状态的组件 我发现我的第一个问题是测试一个改变其状态的组件 错误 1 Reduced Test Case cu
  • JavaFX 在全屏模式下更改场景

    我在使用 JavaFX 时遇到问题 我创建了两个场景和切换按钮 当我单击该按钮时 我正在改变场景 但早些时候我将全屏设置为 true 按下按钮后 Windows 任务栏会显示一会儿 有没有办法在不显示此任务栏的情况下更改场景 有代码 主班
  • 是否有所有国际句号标点符号的字符集?

    我正在尝试将 utf 8 字符串解析为 一口大小 的段 例如 我想将文本分解为 句子 是否存在与所有语言的句子结尾相对应的字符 或正则表达式 的全面集合 我正在寻找能够捕捉拉丁语句号 感叹号和问号 中文和日文句号等的东西 类似上面的东西 但
  • 未捕获的 InvalidValueError:不是功能或功能集合

    看到最近的一个video由 Google 开发人员制作 我决定制作一张英国的区域地图 这个网站上提到了几种可能性 但我后来不得不放弃 所以我最终使用了这个网站 数据下载的示例页面 http mapit mysociety org area
  • RxJs Observables:在更多异步请求后运行 retryWhen

    我的用例是 用户从我们的 API 请求资产 由于 JWT 过期而失败 作为 httpOnly cookie 传递 API 返回 401 状态代码 我们再次使用refresh token对它们进行身份验证 无需用户执行任何操作 以通过客户端向
  • 查询查找外键

    我有一个数据库 需要删除一些外键 但我事先不知道外键是否仍然存在 我发现了一些存储过程 http forums mysql com read php 97 218825 247526 这可以解决问题 但我不想为此创建存储过程 我尝试在存储过
  • 使用 Wss4jSecurityInterceptor 会引发 WRONG_DOCUMENT_ERR:节点在与创建它的文档不同的文档中使用

    我正在将应用程序升级到 Java 11 和 Spring boot 2 1 2 并在尝试通过 SOAP 与外部合作伙伴进行通信时遇到以下错误 导致此问题的是 Wss4jSecurityInterceptor 在运行 java 8 和 Spr
  • 为什么使用 ConfigurationManager.GetSection 会导致“SecurityException:请求失败”,但 ConfigurationManager.OpenExeConfiguration 不会?

    我有一些好奇的事情希望 Net 专家可以帮助我 我有一个自定义配置部分 为了掌握它 我这样做 var s TestConfigurationSection ConfigurationManager GetSection testSectio
  • CSS Hacks、Firefox 3.5 和 Google Chrome

    我四处搜寻 据说 body nth of type 1 在 CSS 中使用仅针对 Safari 和 Google Chrome 你瞧 Mozilla 也正确地解读了它 我又搜索了十遍 但一无所获 所以我就在这里 有没有仅适用于 Google
  • 安装 Raqm (Libraqm) Windows 10

    我正在尝试改变方向 of text on an image using pil on python3 但我无法这样做 因为依赖性未安装 libraqm 我找不到安装方法libraqm 我尝试通过pip安装 但是没有成功 我也尝试找到它 我找
  • 寻找最大元素的时间复杂度分析

    我遇到了一个家庭作业问题 其中哪一个是最佳算法最佳情况运行时间的渐近紧上限 该算法在任意大小的整数数组中查找最大元素n O log n O n2 O n O 1 O n log n 根据我的理解 它是 O n 因为即使这是最好的情况我们仍然