简单的“数组中的最大值”和复杂性计算

2024-02-28

我对这些东西还很陌生,我需要你的帮助。

我应该构建一个高效的简单算法,该算法返回大小为 n 的数组中的最大值,其中包含重复的数字 1,2,...n。

然后我必须确定最佳运行时间、平均运行时间和最差运行时间。

所以我有两个问题:

  1. 首先,我试图理解这个简单算法需要有效解决方案的想法是什么。据我了解,我应该只有一个从 1 到 n 的简单循环并寻找最大值。 “高效”算法是否指出,如果我在数组中找到值 n,我可以停止搜索更多值,因为这是数组中的最大值?

  2. 在计算平均运行时间时,如何使用均匀分布这一事实来确定最佳运行时间和平均运行时间。 也就是说,数组中的每个单元格都有 1/n 的机会成为最大值。

预先非常感谢!


最好的情况 - 找到最大元素作为第一个(O(1)),最坏的情况 - 它是最后一个检查的元素(O(n)).

棘手的部分是平均情况。
为了找到平均情况 - 我们需要expected http://en.wikipedia.org/wiki/Expected_value迭代次数!

由于找到最大值后就可以停止,因此我们可以将问题分为两部分:

  1. [0,n-1): Since on average (assuming uniform independent distribution for each element) - the number n has probability 1/n to be in each place, then the expected number of iterations for this part is 1/n + 2*((n-1)/n)/n + 3 * ((n-1)/n)^2/n + ... + (n-1) * ((n-1)/n)^(n-2)/n 1
    The above formula yields an ugly formula which is O(n) http://www.wolframalpha.com/input/?i=sum%20j*%28%28n-1%29/n%29%5E%28j-1%29%20*%20%281/n%29%20j%20from%201%20to%20n-1%20
  2. 如果前 n-1 个元素不包含该值,则将检查最后一个元素n: 所以你需要添加到上面n* ((n-1)/n)^(n-1),即O(n)以及(极限到无穷大是1/e * n).

这总计为O(n)平均时间解。


(1):各元素的计算公式为j*((n-1)/n)^(j-1) * (1/n)因为:

  • j- 检查的元素数量(迭代次数)
  • ((n-1)/n)^(j-1)- 不存在的概率n在前面的元素中
  • (1/n)- 这个数字的概率是n.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单的“数组中的最大值”和复杂性计算 的相关文章

  • 定点数学比浮点运算快吗?

    多年前 即 20 世纪 90 年代初期 我构建了图形软件包 该软件包基于定点算术和预先计算的 cos sin 表格以及使用牛顿近似方法进行 sqrt 和对数近似的缩放方程来优化计算 这些先进技术似乎已经成为图形和内置数学处理器的一部分 大约
  • Python Pandas:沿一列比较两个数据帧,并返回另一个数据帧中两个数据帧的行内容

    我正在处理两个 csv 文件并作为数据框 df1 和 df2 导入 df1 有 50000 行 df2 有 150000 行 我想将 df2 的 时间 与 df1 求时间差并返回所有列的值 对应相似的行 保存在df3中 时间同步 例如 35
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • 如何将多边形放入另一个多边形内[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有两个多边形 如下图所示 左边是 粗多边形 右边是 最终多边形 现在 我正在寻找算法来将 最终多边形 拟合到 粗糙多边形 内 并具有
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • 解释 Vinay Deolalikar 的证明 P != NP [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 最近有一个paper https www win tue nl gwoegi P versus NP Deolalikar pdf惠普实验
  • Python 旅行商贪婪算法 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 因此 我为旅行推销员问题创建了一种排序 并按 x 坐标和 y 坐标进行排序 我正在尝试实施贪婪搜索 但无法做到 此外 每
  • Java 2d 游戏中的路径查找?

    本质上它是我正在开发的一款吃豆人克隆游戏 我有一个 Enemy 类 并创建了该类的 4 个实例 它们都代表游戏的 4 个幽灵 所有幽灵都会在屏幕的随机区域启动 然后它们必须朝着吃豆人角色前进 当玩家控制吃豆人并移动它时 他们应该跟随它并尽可
  • 如何光栅化旋转矩形(通过 setpixel 在 2d 中)

    我有四个 2d 顶点 A B C D 的旋转矩形 我需要在像素缓冲区中 有效地 光栅化 绘制它 使用 setpixel x y 颜色 怎么做 我正在尝试使用一些代码 例如 convertilg a b c d do up down left
  • 在树结构的 Big-O 表示法中:为什么有些来源引用 O(logN),有些来源引用 O(h)?

    在研究遍历二叉搜索树的任何算法的复杂性时 我看到两种不同的方式来表达同一件事 版本 1 最坏情况下的遍历算法对树的每个高度进行一次比较 因此复杂度是O h 版本 2 最坏情况下的遍历算法对树的每个高度进行一次比较 因此复杂度是O logN
  • 优化计算中使用的 # 个线程的算法

    我正在执行一个操作 我们将其称为CalculateSomeData CalculateSomeData 在连续的 代 中运行 编号为 1 x 整个运行中的代数由CalculateSomeData 的输入参数固定 并且是先验已知的 完成一次生
  • 在一个区域中拟合二维多边形的算法?

    这有标准吗 算法名称 说 我有 10 个不同大小的多边形 我有一个特定大小的区域 我想知道如何填充该区域中的最多多边形 以及它们是如何拟合的 笔记 多边形可以根据限制集进行旋转 一个可能的名称是包装问题 http en wikipedia
  • 连接红黑树

    OCaml 标准库有一个很棒的Set使用非常有效的分而治之算法来计算的实现union两套 我相信它会从一组中获取整个子树 而不仅仅是单个元素 并将它们插入到另一组中 并在必要时重新平衡 我想知道这是否需要 OCaml 使用的 AVL 树中保
  • 排序矩阵的选择算法

    这是谷歌面试问题 给定一个 N N 矩阵 所有行均已排序 所有列均已排序 找到矩阵的第 K 个最大元素 在 n 2 中执行它很简单 我们可以使用堆或合并排序 n lg n 对它进行排序 然后得到它 但是有没有更好的方法 比 n lg n 更
  • 数组所有可能的组合

    我有一个字符串数组 ted williams golden voice radio 我希望这些关键字的所有可能组合采用以下形式 ted williams golden voice radio ted williams ted golden
  • while循环的时间复杂度是多少?

    我正在尝试找出 while 循环的时间复杂度 但我不知道从哪里开始 我了解如何找到 for 循环的复杂性类别 但是当涉及到 while 循环时 我完全迷失了 关于从哪里开始有什么建议 提示吗 这是一个问题的示例 x 0 A n some a
  • 确定一组日期的事件重复模式

    我正在寻找一种模式 算法或库 它将采用一组日期并在退出时返回重复的描述 即集合 11 01 2010 11 08 2010 11 15 2010 11 22 2010 11 29 2010 会产生类似 十一月的每个星期一 的结果 有没有人以
  • 射线与三角形相交

    我看到了快速最小存储射线 三角形交集 http www cs virginia edu gfx Courses 2003 ImageSynthesis papers Acceleration Fast 20MinimumStorage 20
  • Java中的对象池模式

    所以我实现了自己的对象池模式 它工作得很好并且符合预期 从列表中返回我的 老师 对象 并在没有对象时创建它们 我的问题 返回的对象 Teacher 然后需要被转换为它的专门子类之一 例如 生物老师 获得这种功能的最佳方法是什么 编辑 抱歉
  • 文件比较的逻辑

    我试图编写一个用于文件比较的程序 例如 file1 1 2 3 4 5 file2 1 2 3 4 5 如果我逐行执行 我会得到 1 1 2 2 3 4 3 5 4 5 但是 事实是这些文件之间的唯一区别是 我想要得到这样的东西 1 1 2

随机推荐

  • Javascript 与 PHP 一起运行后获取 URL 的内容(文本)

    是否可以使用 PHP 获取 URL 的内容 使用某种函数 例如file get contents or header 但只有在执行一些 JavaScript 代码之后 Example mysite com 有一个脚本可以实现loadUrlA
  • Response.Flush() 抛出 System.Web.HttpException

    我有一个 HttpHandler 用于处理客户端网站上的某些图像 当我将图像流输出到响应对象并调用 Flush 时 偶尔会引发错误 这是一个代码块 var image Image FromStream memStream if size g
  • 如何从嵌入式 JAR 文件加载资源

    我正在尝试加载嵌入 JAR 文件中包含的资源 该项目实际部署在JBoss http en wikipedia org wiki JBoss使用一个EAR http en wikipedia org wiki EAR 28file forma
  • 在 JSON FabricJS 中包含图像数据

    我正在尝试使用 FabricJS 画布 并且想将画布导出为 JSON 我尝试使用两者加载图像new fabric Image and fabric Image fromURL他们俩都很好用 现在我想从画布获取 JSON 但我想要 2 种 J
  • 如何将 pytest-aiohttp 装置与范围会话一起使用

    我正在尝试为 aiohttp 应用程序编写测试 我正在使用 pytest aiohttp 插件 我的目的是在第一次测试执行之前初始化并运行应用程序一次 并在所有测试完成后拆除 pytest aiohttp 固定装置 例如 loop test
  • 在 .NET 中创建 Active Directory 用户 (C#)

    我需要在 Active Directory 中创建一个新用户 我发现了几个例子 如下所示 using System using System DirectoryServices namespace test class Program st
  • Java 9 中的类加载器层次结构

    从 Java 8 开始 我知道类加载器的层次结构如下 引导类加载器 扩展类加载器 应用程序类加载器 Java 9 中类加载器的层次结构有何变化以及它是如何工作的 这里是迁移指南 https docs oracle com javase 9
  • getComputedStyle 规范中是否指定了颜色格式?

    我正在解析返回的颜色字符串getComputedStyle to get R G B and A从中获取价值 到目前为止 在 Chrome 和 Firefox 中 颜色值似乎总是返回rgb or rgba易于解析的格式 const r g
  • 在选项卡式活动中将 sqlite 数据库中的所有数据显示到列表视图中

    作为 Android 开发的新手 我已经在这个问题上被困了几个星期了 而且越来越累了 在查看了每个教程并阅读了我能找到的每个问题和答案之后 我仍然不知道如何让 Android Studio 只获取 SQLite 数据库中的内容并将其内容粘贴
  • 未找到 EGLConfig

    我正在尝试使用 android 制作简单的游戏AndEngine教程 http www raywenderlich com 12065 how to create a simple android game 现在 当我运行该项目时 我收到错
  • AngularJS 只有 ng-repeat 动画中的第一个元素

    由于某种原因 使用下面的代码 ngRepeat 仅对第一个项目进行动画处理并立即显示其余项目 一旦scope categories项目已更新 模板中触发了 ng repeat dataSource getCategories then fu
  • C++ 复制构造函数和浅复制

    假设我有一个类 其中有许多显式 静态分配 成员和一些动态分配的指针 当我声明一个复制构造函数时 我对手动分配的成员进行了深层复制 我不想显式地复制每个静态分配的成员 如何在显式复制构造函数中使用隐式 默认 复制构造函数功能 Use 遏制 c
  • 如何使用 PKAddPassButton 添加“添加到 Apple 钱包”按钮 - swift

    抱歉 如果这听起来很愚蠢 这里完全是菜鸟 我正在尝试创建 添加到Apple Wallet 按钮 但我不知道怎么办 我已经尝试过代码片段here https stackoverflow com questions 49773184 how t
  • MFMessageComposeViewController 中 MessageComposeResult 的条件与 swift [重复]

    这个问题在这里已经有答案了 我正在尝试实现 MFMessageComposeViewControllerDelegate 所需的方法 func messageComposeViewController controller MFMessag
  • AngularJS http.post() 返回 404

    祝大家圣诞快乐 我正在使用 Phonegap AngularJS 应用程序 我正在尝试创建一个 http Post 但它返回 404 错误 我尝试使用 jquery 1 10 2 进行 POST 它有效 我已经为此花费了几天时间 这是完成应
  • 试图阻止 jQuery Mobile 滑动手势冒泡,但它不起作用

    我正在使用 jQuery Mobile 并创建了一些类似于 Android Holo Tabs 的东西 http note io 18RNMRk http note io 18RNMRk 为了使滑动手势能够在选项卡之间切换 这是我添加的代码
  • 设置 MimeMessage 的内容类型?

    我对哑剧消息的内容类型有一个困惑 假设我有一条哑剧消息 这是一条多部分消息 正文部分如下 Mime 正文部分包含纯文本 html 文本 如中的一些字母 正文加粗 第二个哑剧身体部分包含附件 第三个哑剧正文部分包含一张内联图像 通过 cid
  • 使用图表构建交易平台 - 对 Python GUI 库的建议

    我正在构建一个小程序来从市场检索数据并实时绘制图表 虽然交易决策将在很大程度上自动化 但图表会不断更新 以便有人可以跟踪决策的制定方式 并在必要时进行手动干预 对于该任务 对于 Python 来说 什么是一个好的 GUI 库 以下是考虑因素
  • 在 Selenium 中使用无头 Chrome 设置用户数据目录 [重复]

    这个问题在这里已经有答案了 我试图让无头 Chrome 工作 同时使用以下命令设置用户数据目录 from selenium import webdriver options webdriver ChromeOptions options a
  • 简单的“数组中的最大值”和复杂性计算

    我对这些东西还很陌生 我需要你的帮助 我应该构建一个高效的简单算法 该算法返回大小为 n 的数组中的最大值 其中包含重复的数字 1 2 n 然后我必须确定最佳运行时间 平均运行时间和最差运行时间 所以我有两个问题 首先 我试图理解这个简单算