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

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(使用前将#替换为@)

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

  • 最慢的计算复杂度(Big-O)

    在这些算法中 我知道 Alg1 是最快的 因为它是 n 平方的 接下来是 Alg4 因为它是 n 的立方 然后 Alg2 可能是最慢的 因为它是 2 n 这应该具有非常差的性能 然而Alg3和Alg5在我的阅读速度方面还没有遇到过 这两种算
  • PHP 内置函数复杂性(isAnagramOfPalindrome 函数)

    我在过去的两个小时里一直在谷歌搜索 但找不到 php 内置函数时间和空间复杂度的列表 我有回文字谜 https stackoverflow com questions 4628386 what is the best algorithm t
  • 解释一下从 N 个给定集合中的每一个中给出第 K 个最大数字的示例?

    今天我尝试解决一个Facebook 编程挑战赛 https facebook interviewstreet com recruit challenges 我遇到的挑战是 酒吧问题 可以找到here https github com alo
  • 如何求小于给定数的最大2次方

    我需要找到小于给定数字的最大 2 次幂 我陷入困境 找不到任何解决方案 Code public class MathPow public int largestPowerOf2 int n int res 2 while res lt n
  • 有人可以解释以下异或属性

    我的一个论坛提到给定的数组n数字 arr 0 n 1 以下条件成立 is the xor运算符 f l r f 0 r f 0 l 1 where f l r arr l arr l 1 arr r 我检查了上面的数组数量和不同的值l an
  • 在 C++ 中通过引用传递 std 算法谓词

    我正在尝试从 a 中删除元素std list并保留已删除元素的一些统计信息 为此 我使用列表中的remove if 函数 并且我有一个谓词 我想使用这个谓词来收集统计数据 这是谓词的代码 class TestPredicate privat
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • 7 张牌扑克手牌评估器

    有谁知道评估 7 张牌扑克牌的快速算法吗 这比简单地暴力检查 7 张牌中每 21 个 5 张牌的组合更有效 Cheers Pete 我写了一篇JavaScript 核心评估方法仅使用位操作 因此速度非常快 考虑到这一点 查看 21 种组合还
  • 使用多级解决方案计算二维网格中的最近邻

    我有一个问题 在 x y 大小的网格中 我提供了一个点 并且我需要找到最近的邻居 在实践中 我试图在 pygame 中找到距离光标最近的点 该点跨越颜色距离阈值 计算如下 sqrt rgb1 0 rgb2 0 2 rgb1 1 rgb2 1
  • 异或交换可以扩展到两个以上的变量吗?

    我一直在尝试将异或交换扩展到两个以上的变量 例如n变量 但我没有得到比这更好的地方3 n 1 对于两个整型变量x1 and x2你可以像这样交换它们 swap x1 x2 x1 x1 x2 x2 x1 x2 x1 x1 x2 所以 假设你有
  • 数学组合的完美最小哈希

    首先定义两个整数N and K where N gt K 两者都在编译时已知 例如 N 8 and K 3 接下来 定义一组整数 0 N or 1 N 如果这使答案更简单 并调用它S 例如 0 1 2 3 4 5 6 7 的子集数量S wi
  • 大 O 和等号,滥用符号

    维基百科说 http en wikipedia org wiki Big O notation Matters of notation 上面定义的语句 f x is O g x 通常写为 f x O g x 有些人认为这是对符号的滥用 因为
  • 子序列和

    给定一个整数数组 例如 1 2 3 1 查找是否存在总和为0并返回它 例如 1 2 3 or 2 3 1 检查每个子序列是O n 2 这效率太低了 有改进的想法吗 创建一个新数组 其中每个元素等于前一个元素加上该元素的总和 Input 1
  • 举例解释bpe(字节对编码)?

    有人可以帮忙解释一下背后的基本概念吗BPE模型 除了这张纸 https arxiv org abs 1508 07909 目前还没有那么多解释 到目前为止我所知道的是 它通过将罕见和未知的单词编码为子词单元序列来实现开放词汇表上的 NMT
  • 以 O(1) 计算汉明权重 [重复]

    这个问题在这里已经有答案了 在二进制表示中 汉明权重是 1 的数量 我偶然发现了网络并找到了一个 O 1 的答案 v v v gt gt 1 0x55555555 v v 0x33333333 v gt gt 2 0x33333333 in
  • n 或 nlog(n) 比常数时间或对数时间更好吗?

    在 Coursera 上的普林斯顿教程中 讲师解释了遇到的常见增长顺序函数 他说 线性和线性算术运行时间是 我们努力的目标 他的推理是 随着输入大小的增加 运行时间也会增加 我认为这是他犯了错误的地方 因为我之前听过他提到线性增长顺序对于高
  • 如何对对象进行排序? (画家算法)

    所以我有 4 个矩形形状 我正在尝试应用排序算法 画家算法 https en wikipedia org wiki Painter 27s algorithm 来知道我需要先绘制哪些形状 在 3d 中 然后绘制哪个形状 Note 相机位于右
  • 动态规划 (DP) 中的重叠子问题是什么?

    为了使动态规划适用 问题必须具有两个关键属性 最优子结构 and 重叠子问题 1 https en wikipedia org wiki Dynamic programming 对于这个问题 我们只关注后一个属性 有各种不同的定义重叠子问题
  • 将名称字符串编码为唯一的数字

    我有一大堆名字 数以百万计 他们每个人都有一个名字 一个可选的中间名和一个姓氏 我需要将这些名称编码为唯一代表这些名称的数字 编码应该是一对一的 即一个名称只能与一个数字相关联 一个数字只能与一个名称相关联 对此进行编码的明智方法是什么 我
  • 应用对数来导航树

    我曾经知道一种使用对数从树的一片叶子移动到树的下一个 有序 叶子的方法 我认为它涉及获取 当前 叶子的位置值 排名 并将其用作从根向下到新目标叶子的新遍历的种子 一直使用对数函数测试来确定是否沿着右或左节点向下到达叶子 我已经不记得如何运用

随机推荐

  • 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 因为即使这是最好的情况我们仍然