为什么说任何基于比较的算法将 5 个元素排序都需要 7 次?

排序算法对结果的唯一要求就是操作数满足全序关系:

  1. 如果 a≤b 并且 b≤c 那么 a≤c(传递性)。
  2. 对于 a 或 b,要不 a≤b,要不 b≤a(完全性)。

这个问题可以用信息论来回答。

我从 1 到 5 中挑一个数字出来让你来猜,每回合你都可以问我一个问题,我的回答“是”或“不是”(1 或 0),那么你至少需要几个回合才能保证猜出这个数字?

比较符合这个游戏精神的玩法是从自己的幸运数字(比如我的是7)开始猜起,一个一个地问我“是不是X?”, 可能你的运气足够好,一个回合就能够猜对,但是在最坏的情况下可能就需要5个回合,所以你的答案应该是“至少需要5个回合” (事实上你至少只需要一次就“有可能”猜出来,但为了“保证能”猜出来,你只好委曲求全地说 5), 换句话说这种猜法的最优下界是 5。 (平均性能是 1×1/5+2×1/5+…+5×1/5=(1+…+5)/5 = 3)

但因为你会二分,所以会这样问“是不是比3大?”……而且无论我挑出的数字是几,都只用3个回合。 二分显然是一种更佳的策略,那么它好在什么地方呢? 用信息论理解: 最大的熵。

英文版维基百科词条有个大致的解释:Comparison_sort, 最少次数为 log(5!) = 6.91,取整的话,就是 7。

决策树如下:

比较排序决策树

如果我们用归并排序的话,比较次数是O(nlogn),因为归并排序是 全局最优解,但是在局部,归并并不都保证是最优的。

附一张快速排序的 gif 图:

快速排序

相关阅读:

面试算法有必要吗?

Xshell 连接 VMware虚拟机操作 截图和使用 vmwareVMware总部位于美国加州帕洛阿尔托(Palo Alto),是全球云基础架构和移动商务解决方案厂商,提供基于VMware的解决方案,企业通过数据中心改造和公有云整合业务,借助企业安全转型维系客户信任,实现任意云端和设备上运行、管理、连接及保护任意应用Xshell(安全终端模拟软件)Xshell [1]是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。 阅读详情

相关推荐

MTGS与3D高斯泼溅:如何用多轨迹数据重建自动驾驶场景(附代码解析)

本文深入解析了MTGS(多轨迹高斯泼溅)技术在自动驾驶场景重建中的工程实践。该方法通过分层场景表示,巧妙融合多轨迹数据,利用3D高斯泼溅技术统一处理静态几何与动态物体,有效解决了复杂环境下的重建难题。文章结合代码,详细阐述了其实现框架、损失函数设计及优化策略,为构建高保真数字孪生场景提供了实用指南。

v5w6x的博客 443

数据结构:对基于比较的排序,在最坏情况下的最少比较次数推导证明

数据结构:对基于比较的排序,在最坏情况下的最少比较次数推导证明

maxxxml的博客 2660

MOBsf联动雷电模拟器(在docker国内库撤销后)

MobSF (全称:Mobile Security Framework,中文名:移动安全框架) 是一个自动化的移动应用程序(Android / iOS / Windows)开源测试工具,该工具采用Python开发,能够执行静态,动态和恶意软件分析。MobSF提供了很多自动化分析功能,尤其适用于Android应用。安装必备(默认已准备好)docker(kali) 现在的国内镜像源都已经下架了只能开代理下载桌面版然后给pull到本地。

qq_48149564的博客 1600

排序算法

sorting algorithm https://en.wikipedia.org/wiki/Sorting_algorithm 排序算法 本文来自于:https://en.wikipedia.org/wiki/Sorting_algorithm 本文保留了上面链接的绝大部分内容,省略了“我自认为”不重要的部分。点击上面链接查看原文 在计算机科学中,排序算法就是把list中的元素 按特定顺...

溺水三千只取一瓢饮 1320

基于Cohesive单元的二维水力压裂(二)

部件 2D-deformabel-shell 尺寸100 矩形工具(-20,-20)(20,20) 刨分:预知cohesive单元&定位注液点位置,定义全局网格尺寸0.2 X方向采用过渡网格,向中间加密。指定网格类型:CPE4P,指定单元类型,COH2D4P,粘性正则化系数:0.0001 材料属性 材料1 弹性模量10e9,泊松比0.25,渗透率1e-7,孔隙比0.1,液体比重...

s0302017的博客 1598

TSMaster如何用珠海创芯CAN卡实现高效CAN通信(附完整驱动安装指南)

本文详细介绍了如何使用TSMaster软件与珠海创芯CAN卡实现高效CAN通信,包括驱动安装、系统配置、ControlCAN.dll替换及TSMaster集成配置等关键步骤。通过实战指南和故障排除技巧,帮助工程师快速搭建稳定可靠的CAN通信测试环境,适用于汽车电子和工业控制等领域。

weixin_29201859的博客 479

比较排序的最少比较次数

因为含有n个记录的序列可能的出现的初始状态为n!种, 所以对于一颗用来判定比较 生成的树来说就有n!的叶子节点。 而每一种到达叶子节点的路径就是一个比较过程。 我们要的是一组排好序的叶子节点。 所以它那一个路径就是最少比较次数。 也就是整棵树的高度即log(n!).

ljd4305的专栏 3023

STM32 LwIP协议栈优化:从TCP延迟10ms降至1ms的内存配置手册

摘要: 本文针对STM32嵌入式开发中LwIP TCP通信的高延迟问题(默认配置下延迟达10~20ms),提出纯软件优化方案,通过调整内存配置与TCP参数将延迟降至1ms。核心问题包括内存池不足、pbuf分配低效及Nagle算法拖累,优化步骤包括: 内存池扩容:增大MEMP_NUM_TCP_PCB至10、PBUF_POOL_SIZE至32,避免资源竞争; pbuf静态池分配:采用2048字节大块缓冲区匹配DMA传输,减少分块与拷贝; 关闭Nagle算法:设置TCP_NODELAY=1,禁用延迟确认以加速小包

weixin_42212753的博客 1707

比较排序算法概述

上述输入序列的元素序列:6,8,5根据插入排序算法构建的插入排序决策树排序目标时升序排列最坏的情况下需要从根结点比较到最长路径的叶子结点最好的能够确定全序列有序情况是:a1>a2a_1>a_2a1​>a2​a1

xuchaoxin1375的博客 875

华为OD机试真题 新系统 2026-09-26 Java&Go&C【数据中心最佳维护时间窗】

数据中心使用一个整数数组 scores,记录 N 小时内每小时的服务器得分(可正可负)。0 表示服务器故障(无效小时)。

MISAYAONE的博客 96

卫朋:IPD流程落地之产品开发验证阶段解读

IPD验证阶段

产品线负责人 1486

【数据结构】第七章 排序

1.排序基本概念 1.拓扑排序是将有向图中所有结点排成一个线性序列,虽然也是在内存中进行的,但它不属于这里所提到的内部排序范畴,也不满足前面排序的定义。 2.对于任意序列进行基于比较的排序,求最少的比较次数应考虑最坏情况。对任意n个关键字排序的比较次数至少为⌈log2(n!)⌉\lceil log_2(n!) \rceil⌈log2​(n!)⌉ 对任意7个关键字进行基于比较的排序,至少要进行几次...

sinat_33438008的博客 5018

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

为什么说任何基于比较的算法将5个元素排序都需要7次?

排序算法对结果的唯一要求就是操作数满足全序关系: 如果 a≤b 并且 b≤c 那么 a≤c(传递性)。 对于 a 或 b,要不 a≤b,要不 b≤a(完全性)。 这个问题可以用信息论来回答。 我从 1 到 5 中挑一个数字出来让你来猜,每回合你都可以问我一个问题,我的回答“是”或“不是”(1 或 0),那么你至少需要几个回合才能保证猜出这个数字? 比...

weixin_34345753的博客 513

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

只使用7次比较,完成5个元素的排序

背景 考虑快速排序为什么最坏情况下时间复杂度为O(n2)?这是因为每次进行划分的时候,都有一个部分大小为0(或者说为一个常数)。如果我们能够找到一种时间复杂度为O(n)的划分方法,使得划分后的两部分大小均为Θ(n),则快速排序的时间复杂度总能为Θ(nlogn)。 假设我们能够用非常小的代价寻找5个元素中的中位数,则我们可以递归的将原数组划分为大小为5的子数组,寻找每个子数组的中位数。...

anjiao62582的博客 1368

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

5个数7次比较排序

问题内容: 五个数七次比较排序原讨论链接:http://community.youkuaiyun.com/expert/topicview1.asp?id=2537867所属论坛:数据结构与算法     审核组:其他提问者:friendliu     解决者:zlf_jack感谢:HUNTON、zlf_jack、plainsong、IT_w

masterBorn的专栏 3370

用7次比较完成5个元素的排序

7次比较完成5个元素的排序: 有五个数字,[a, b, c, d, e],进行排序。以下排序均按从小到大进行排序: 1) 将a与b进行排序,排序结果为[a’, b’],共用1次比较,累计1次比较; 2) 将c与d进行排序,排序结果为[c’, d’],共用1次比较,累计2次比较; 3) 将a’与c’进行比较,若a’ < c...

weixin_30311605的博客 791

【算法设计与分析】5个数7次比较排序的算法

找到最快的算法,一直是计算机界的目标之一,而排序就是其中最基本的算法。什么样的排序才是最快的呢? 1.最少的比较次数,算法理论证明n个数排序,如果是基于比较的算法,至少需要 ㏒(n!) 向上取整数。下面给出小数目下,最少比较次数: n 1 ...

chuanzhuanxian8669的博客 736

常用排序算法总结(1)-- 比较排序

我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。排序算法大体可分为两种:一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。这里我们来探讨一下常用的比较排序算法,非比较排序算法将在下一篇文章中介绍。下表给出了常...

vincent 1万+

6次比较求5个数中间值,7次比较排序

转自:http://kasy-13.blog.163.com/blog/static/821469142010312730191/  6次比较求5个数中间值算法(a,b,c,d,e) 1、任取四个数比较,如a>b,c>d。(两次) 2、a,c比较求出大者,假设为a,则此数

shamoqiuyin的世界 1349

算法中对于用七次比较完成5个元素的排序

一开始自己经过了好长时间的思考,都没有完成这个问题的排序,在最终经过暗暗下定决心,终于完成了这道题目的求解,下面将我的分析思路写下来,希望我平实的语言可以帮助你理解这个题目。          对于五个元素a,b,c,d,e的排序,我们需要借鉴3个元素排序和四个元素中对于3个元素建立全序的思想,下面我们就来看看它们的思想吧!        1.对于三个元素a,b,c进行排序,示意图如下所示:

chopstics的专栏 7412
上一篇: 「译」JavaScript 的怪癖 1:隐式类型转换
下一篇: JavaScript 中的“自动分号插入”机制(ASI)
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值