从 N 个数中找出最大和第二大的数

2023-11-29

给定 n 个数字,如何使用最多 n+log(n) 次比较找到最大和第二大数字?

请注意,这不是 O(n+log(n)),而是真正的 n+log(n) 次比较。


帕杰顿发表了评论。

让我详细说明一下。

正如帕杰顿所说,这可以通过锦标赛选择来完成。

可以将其视为淘汰赛单打网球锦标赛,其中球员的能力有严格的顺序,并且比赛的结果完全由该顺序决定。

第一轮就有一半人被淘汰。在下一轮中,还有一半等(可能会有一些轮空)。

最终获胜者将在最后一轮中决出。

这可以被视为一棵树。

树的每个节点都将是该节点的子节点之间的比赛的获胜者。

叶子是玩家。第一轮的获胜者是叶子的父母等。

这是一个有 n 个节点的完全二叉树。

现在,沿着胜利者的道路前进。获胜者已经参加了 log n 场比赛。现在考虑那些 log n 场比赛的失败者。第二好的一定是其中最好的。

在 n-1 场比赛中决出胜者(每场比赛淘汰一场),而 logn 中的胜者则在 logn -1 场比赛中决出。

因此,您可以在 n+logn - 2 次比较中确定最大和第二大。

事实上,可以证明这是最优的。在最坏情况下的任何比较方案中,获胜者都必须进行logn比赛。

为了证明这一点,假设采用积分制度,在比赛结束后,获胜者获得失败者的积分。最初,所有人都以 1 分开始。

最终获胜者获得n分。

现在给定任何算法,都可以安排为拥有更多分数的玩家总是获胜者。由于在这种情况下,任何人在任何比赛中的分数最多都会翻倍,因此在最坏的情况下,您至少需要获胜者参加的 n 场比赛。

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

从 N 个数中找出最大和第二大的数 的相关文章

  • 您可以从 MethodInfo 对象获取 Func (或类似的)吗?

    我意识到 一般来说 使用反射会对性能产生影响 实际上 我本人根本不喜欢反思 这纯粹是学术问题 假设存在一些如下所示的类 public class MyClass public string GetName return My Name 请耐
  • 按类型进行弹簧接线比按名称接线要慢很多

    在我的项目中 我试图迁移 Foo foo Foo beanFactory getBean name into Foo foo beanFactory getBean Foo class 好处是显而易见的 类型安全 更少复杂的代码 更少无用的
  • 按属性对对象列表进行排序 C#

    我有这门课 public class Leg public int Day get set public int Hour get set public int Min get set 我有一个获取腿列表的函数 称为 GetLegs Lis
  • 从 JavaScript 数组中获取对象值的最大值和最小值

    从 JavaScript 对象数组中获取最大值和最小值的最佳方法是什么 Given var a x 1 y 0 x 1 y 10 x 12 y 20 x 61 y 10 var minX Infinity maxX Infinity for
  • 在android中的webview中运行时更改URL

    我创建了一个小程序 可以在 webview 中加载特定网站 我想密切关注 URL 如果 URL 包含 xxx 单词 那么它应该导航到另一个页面 例如 如果我设置 www example com 我现在可以导航到 www example co
  • 我们可以使用什么方法来重塑非常大的数据集?

    当由于非常大的数据计算将花费很长时间并且因此我们不希望它们崩溃时 事先知道要使用哪种重塑方法是很有价值的 Lately methods for reshaping data have been further developed regar
  • 简单的排名算法

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

    d a k 1 b whatever b k 2 b sort by k 想要在 python 中按 k 降序对这个字典进行排序 有点棘手 请帮忙 dicts 是无序的 所以没有办法直接对它们进行排序 但如果你是 愿意转换dict进入 键
  • 对于 IEEE754 NaN 值,所有比较都返回 false 的基本原理是什么?

    为什么 NaN 值的比较行为与所有其他值不同 也就是说 与运算符 进行的所有比较 其中一个或两个值为 NaN 都会返回 false 这与所有其他值的行为相反 我想这在某种程度上简化了数值计算 但我找不到明确说明的原因 即使在关于 IEEE
  • 如何为多边形创建内部螺旋?

    对于任何形状 我如何在其内部创建类似形状的螺旋 这与边界 使用 Minkowski 和 类似 尽管它会是相同形状的螺旋 而不是在形状内部创建相同的形状 我找到了这个 http www cis upenn edu cis110 13su le
  • 在 C# 中对由整数组成的多维 [] 数组进行排序

    我有以下数组 private int testSamples new testSamples 101 101 它应该代表一个名册 第0到100列 第0到100行 在这个名册中 掉落了各种化学液体 我为之做这件事的人希望以这样的方式工作 他可
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • 双线性序列给出奇数结果

    我试图让我的表现技能 不存在 达到标准 但在将公式写入代码时遇到了问题 这是我试图将其引用为 转换 为代码的公式 考虑一个序列 u 其中 u 定义如下 号码u 0 1是第一个u 对于每个x in u then y 2 x 1 and z 3
  • 什么是“朴素”算法,什么是“封闭式”解决方案?

    我有一些关于描述算法时使用的术语语义的问题 首先 朴素 算法是什么意思 这与给定问题的其他解决方案有何不同 解决方案还可以采取哪些其他形式 其次 我听到很多人提到 封闭式 解决方案 我也不知道这意味着什么 但在尝试解决递归关系时经常会出现
  • 这个 cProfile 结果告诉我需要修复什么?

    我想提高Python脚本的性能并且一直在使用cProfile生成性能报告 python m cProfile o chrX prof bgchr py args 我打开这个chrX prof使用 Python 的文件pstats并打印出统计
  • 坐标算法 - 绕中心旋转

    通过查看这张图片 我想您会很好地理解我的问题 图片已删除 网址不再有效 现在返回广告 所以基本上我想要一个函数 它接受一个对象作为参数 并根据我之前添加的对象数量为该对象提供正确的坐标 假设我将所有这些对象添加到一个数组中 objectAr
  • 如何在C中实现带连分数的自然对数?

    这里我有一个小问题 根据这个公式创建一些东西 这就是我所拥有的 但它不起作用 弗兰基 我真的不明白它应该如何工作 我尝试用一 些错误的指令对其进行编码 N 是迭代次数和分数部分 我认为它会以某种方式导致递归 但不知道如何 谢谢你的帮助 do
  • 比较运算符性能 <= 与 !=

    让我们首先声明代码可读性胜过微优化 我们应该将其留给编译器 这只是一个奇怪的案例 具体细节似乎与一般建议相比很有趣 因此 我在搞素数生成器函数 并提出了一种奇怪的行为 其中 人们建议效率最高 实际上效率最低 而 C private stat
  • 如何光栅化旋转矩形(通过 setpixel 在 2d 中)

    我有四个 2d 顶点 A B C D 的旋转矩形 我需要在像素缓冲区中 有效地 光栅化 绘制它 使用 setpixel x y 颜色 怎么做 我正在尝试使用一些代码 例如 convertilg a b c d do up down left
  • 独立对列进行排序,使得所有空值都位于每列的最后

    这是一个名为的示例表animal name color fox brown fox red dog gold 现在 我想要的是这样的结果 fox dog brown gold red 名称应该是结果的列 不同颜色值作为行 我的第一个想法是

随机推荐

  • 无法从浏览器查看在 docker 容器中运行的 Rails 应用程序

    我正在 docker 容器中运行 Rails 应用程序 执行后docker compose up我在浏览器中查看并看到ERR CONNECTION REFUSED 我尝试过端口转发docker run p 3000 3000 docker
  • 使用 React.js 实现 SlideToggle 功能

    我想用我的下拉菜单完成以下任务 1 单击时显示 2 第二次单击时隐藏它 3 单击外部任意位置时将其隐藏 4 使用幻灯片效果完成所有这些 我已经覆盖了 1 3 个 我4号就被堵住了 如何创建幻灯片效果以及下面发生的以下单击事件 我已经使用 j
  • 如何在这个 ubuntu 终端命令中仅引用一次 Main:“javac Main.java && java Main”?

    我正在审查许多不同的 java 程序 并试图找出如何仅更新对程序名称的引用一次而不是两次 有没有办法在单个终端命令中使用变量 S 我试图改进的命令是这种形式 javac Main java java Main 我只想更改对 Main 的引用
  • 异步加载 - UITableView 和 Firebase

    我正在开发一个从 Firebase 加载列表数据并填充 UITableView 的项目 虽然我看到从我的 firebase 实例调用快照 但它们不会填充表 而本地同步 NSMutableArray 显示内容 如何让 UITableView
  • 使用 Python 3.x 还是 2.x? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 几个月前我开始学习 Pyt
  • python3.x 多处理循环没有“if __name__ == '__main__':”

    我有这个文件 它没有任何有用的工作 仅用于学习 import multiprocessing sys def parent numproc 2 print at start childs print bfore Pipe parentEnd
  • @ManagedBeans 在 JavaEE6 中是否因为 CDI/Weld 中的 @Named 而过时?

    由于 CDI 及其实现 Weld JEE6 中的每个 POJO 都可以用 Named 这使得视图可以访问 POJO 这是否意味着 ManagedBeans 现在已经完全过时了 或者我错过了什么地方 ManagedBean还有道理吗 简而言之
  • 通过键连接多个 Kafka 主题

    如何编写一个以可扩展的方式加入多个 Kafka 主题的消费者 我有一个主题发布带有密钥的事件 第二个主题发布与具有相同密钥的第一个主题的子集相关的其他事件 我想编写一个订阅这两个主题并为两个主题中出现的子集执行一些附加操作的消费者 我可以使
  • Spark:将大文件写入 HDFS 时不允许自我抑制

    我正在使用 Spark 将一个大文件写入 HDFS 基本上我所做的就是加入 3 个大文件 然后使用 toJSON 将结果数据帧转换为 json 然后使用 saveAsTextFile 将其保存到 HDFS 最终写入的文件大约为 4TB 应用
  • Java 8 LocalDate 不会解析有效的日期字符串[重复]

    这个问题在这里已经有答案了 这里是 Java 8 我有以下代码 final String createdDateStr 20110920 final DateTimeFormatter formatter DateTimeFormatter
  • Mac OS X 中的应用程序更新

    要在 Windows 中提供应用程序更新 我们只需下载安装程序并运行它即可 应用程序安装在 PROGRAMFILES 中 快捷方式放置在不同的地方 键和值被添加到注册表中 以在系统的程序列表中提供一个条目 为了在Linux中提供应用程序更新
  • 使用条件逻辑从 pandas df 创建多个列表[重复]

    这个问题在这里已经有答案了 我有一个看起来像这样的 df var1 var2 var3 0 a 1 0 b 7 0 c 5 0 d 4 0 z 8 1 t 9 1 a 2 2 p 3 60 c 3 我正在尝试创建每组值的列表var2对应于给
  • Swift 4:计时器崩溃 - 无法识别的选择器发送到实例

    我试图调用 Timer 的一个实例 并在每一秒过去时打印 一秒已过去 我正在关注 Udemy 上的完整 iOs 11 和 Swift 开发人员课程 教练确实这样做了 他的代码可以工作 但我的代码却崩溃了 这是代码 var timer Tim
  • 将csv数据转换为数组格式

    我正在尝试使用jquery 形成一个wordCloud 我有一个 csv 文件需要读取并使用该数据形成一个 wordCloud 我的 csv 文件中有列 text weight Lorem 15 Ipsum 9 等等 但输入数据需要采用以下
  • Protobuf-net .proto 文件生成用于继承

    我正在对 Protobuf net 进行原型设计 以替换我们现有的一些 C 代码 该代码当前正在使用 Datacontract 将对象序列化为 Xml 使用protobuffer我们可以轻松地与Java共享数据 因此 我对 Protobuf
  • scipy.spatial.ckdtree 运行缓慢

    我一直在使用spatial cKDTree in scipy计算点之间的距离 对于我的典型数据集 查找约 1000 个点到约 1e6 点数组的距离 它总是运行得非常快 约 1 秒 我在 Ubuntu 14 10 的计算机上以 python
  • iPhone 本地化 - 某些本地化的 XIB 无法加载

    我制作了一个具有本地化版本的 iPhone 应用程序 它大部分工作正常 但有两个视图无法加载本地化 NIB 使用标准 NIB 英文 我确信我正确地进行了本地化 获取信息 使文件可本地化 添加本地化 添加 pl 波兰语 然后编辑创建的 NIB
  • 替换嵌套数组 ruby​​ 中的元素

    我无法在代码中找到问题所在 如果特定元素出现在宾果板上 我想用 X 替换它们 class BingoBoard def initialize board bingo board board end def number letter let
  • 如何在C++中默认初始化内置类型的局部变量?

    如何在 C 中默认初始化原始类型的局部变量 例如 如果 a 有一个 typedef typedef unsigned char boolean that s Microsoft RPC runtime typedef 我想更改以下行 boo
  • 从 N 个数中找出最大和第二大的数

    给定 n 个数字 如何使用最多 n log n 次比较找到最大和第二大数字 请注意 这不是 O n log n 而是真正的 n log n 次比较 帕杰顿发表了评论 让我详细说明一下 正如帕杰顿所说 这可以通过锦标赛选择来完成 可以将其视为