为什么说任何基于比较的算法将 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 图:

快速排序

相关阅读:

面试算法有必要吗?

转载于:https://www.cnblogs.com/lanzhi/archive/2013/04/22/6468112.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iTerm2分屏时,如何使得新窗口的当前路径和前一个窗口一样?

From: https://segmentfault.com/q/1010000005355758 Preferences 里面设置 Working Directory 为 reuse previous sessions directory

全国80几所重点大学ftp资源库(经常逛逛可能有惊喜哦)很难收集的,知道其他的友友可以留言完善...

2019独角兽企业重金招聘Python工程师标准>>> 重庆交通大学外国语学院ftp \\202.202.240.93/ 密码:a 帐号:as 电子科技大学ftp    ftp://xsc. cuit. edu. cn/   大连理工大学    ftp://ftp. dlut. edu. cn   上海交通大学    ftp://mssite. sjtu. …

python发送包含html、图片、附件和链接的邮件

从我的126邮箱给我的QQ邮箱发送测试邮件 1.smtplib模块的使用 smtplib库用来发送邮件。需要用到的函数如下: 连接到SMTP服务器,参数为SMTP主机和端口: SMTP.connect([host[,port]]) 登录SMTP服务器,参数为邮箱用户名和密码&#x…

apiCloud中Frame框的操作,显示与隐藏Frame

Frame是一层一层的概念, 有的位于上层,有的位于下层。 1.加载菜单 2.加载页面层 3.首页拆分出内容层,这个时候内容层位于页面层的上方,当点击其他页面的时候,内容层遮挡住了他们 解决方案一 判断是否是首页&#xff0c…

迅雷Chrome插件引发的Uncaught ReferenceError: xl_chrome_menu is not defined JS报错

前几天发现我也有这问题 具体是点击某个button 会出这错。 倒是没啥影响不过用chrome控制台调试的时候比较烦 baidu了下 都说卸掉迅雷。。但是出于程序员的角度还是想解决掉BUG 我的方法是 找到对应的xl.js文件。、 找不到? 直接到chrome文件夹下搜索下xl.js就好了。…

学习《css世界》笔记之使用css实现凹凸效果

显示效果 HTML <span class"ao"></span> <span class"tu"></span>CSS .ao,.tu{display: inline-block;width: 0;font-size: 14px;line-height: 18px;margin: 35px;/* color: #fff; *//* 文字颜色 */}.ao:before,/* :before的主…

IO调度算法

IO调度算法的选择 一) I/O调度程序的总结 1) 当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成. 2) 每个块设备都有它自己的队列. 3) I/O调度程序负责维护这些队列的顺序,以更有效地利用介质.I/O调度程序将无序的I/O操作变为有序的I/O操作. 4) 内核…

ORA-01555 原因与解决

ORA-01555 原因与解决&#xff1a; 前面提到了ORA-01555错误&#xff0c;那么现在来看一下ORA-01555错误是怎样产生的。由于回滚段是循环使用的&#xff0c;当事务提交以后&#xff0c;该事务占用的回滚段事务会被标记为非活动&#xff0c;回滚段空间可以被覆盖重用。那么一个问…

使用css优雅解决文字两端对齐的方式之一

效果图 HTML <body><div>学校</div><div>班级</div><div>班主任</div><div>上课时间</div><div>名字</div></body>CSS div {margin: 10px 0;width: 70px;border: 1px solid brown;text-align: just…

学习《css世界》笔记之loading三点动画效果

动画实例 HTML <div>正在加载中<span>...</span></div>CSS span {display: inline-block;height: 1em;line-height: 1;text-align: left;vertical-align: -0.25em;/* 属性设置元素的垂直对齐方式。指定为负长度&#xff0c;可以使元素降低 */overfl…

关于今天

今天天气晴朗,晴空万里,万里无云,哈哈... 早上起来的时候,大雾,妖风四起. 然后早上起来居然就玩了一天的 冰封要塞. 说说玩了后的心得吧. 推塔游戏,额,这是CF第一次推出的这种模式.可以说和dota和英雄联盟有些相似.估计是某人从dota和英雄联盟这么火的情况下想出来的这招. 推塔…

学习《css世界》笔记之content自动添加开启闭合符号

实例 HTML <p lang"zh"><q>啦啦德玛西亚</q></p><p lang"en"><q>This book is very good!</q></p><p lang"no"><q>denne bog er fantasisk!</q></p><p class"…

maven+jetty项目在tomcat部署

步骤1&#xff1a;项目打包 clean install 步骤二&#xff1a;拷贝war 包到tomcat下 步骤三&#xff1a;修改server.xml文件的端口 步骤四&#xff1a;启动tomcat,注意jetty的项目是不需要带项目名的&#xff0c;Tomcat的项目需要加上项目名。 温馨提示&#xff0c;在启动tomca…

学习《css世界》笔记之多行文本实现垂直居中

效果图 HTML <div class"box"><div class"content">具有行高实现的多行文字垂直居中效果&#xff0c;需要属性vertical-align帮助</div> </div>CSS .box{width: 200px;line-height: 120px;background-color: #f0f0f0;}.content{…

学习《css世界》笔记之使用vertical-align数值实现文字和小图标对齐

效果图 HTML <p>请选择<i class"icon-arrow"></i></p> <p>请选择<i class"icon-arrow valing-1"></i></p> <p>请选择<i class"icon-arrow valing-2"></i></p>CSS .i…

MS SQL 能否修改实例名称

前几天研究了了一下修改数据库名称的方式后&#xff0c;今天突然冒出一个问题&#xff0c;MS SQL的命名实例是否也可以修改呢&#xff1f;例如下图&#xff0c;我在本机上安装了一个命名实例GSP&#xff0c;如果我想将其改为GSPS&#xff0c;能行吗&#xff1f; 如果可以&#…

MYSQL数据库时间字段INT,TIMESTAMP,DATETIME性能效率比较

from: http://www.piaoyi.org/database/MYSQL-INT-TIMESTAMP-DATETIME.html Author&#xff1a;飘易 Source&#xff1a;飘易 Categories&#xff1a;数据库 PostTime&#xff1a;2016-10-28 13:12:22 正 文&#xff1a; 在数据库设计的时候&#xff0c;我们经常会需要设计时…

学习《css世界》笔记之使用overflow做文字溢出点点点效果

效果图 HTML <p class"p1">qwertyuiopasdfghjklzxcvbnm</p><div class"d1"><p> 冯塘村过去经济较为落后。几年前&#xff0c;镇里以400多年的冯塘古村为基础&#xff0c;引来社会资金投资休闲农庄和共享民宿&#xff0c;把这里建…

Portal-Basic Java Web 应用开发框架:应用篇(十四) —— 异步 Action

Portal-Basic Java Web应用开发框架&#xff08;简称 Portal-Basic&#xff09;是一套功能完备的高性能Full-Stack Web应用开发框架&#xff0c;内置稳定高效的MVC基础架构和DAO框架&#xff08;已内置Hibernate、MyBatis和JDBC支持&#xff09;&#xff0c;集成 Action拦截、F…

类似No module named 'bs4'等错误的解决方法

from: https://www.cnblogs.com/xisheng/p/7856334.html 最近开始接触爬虫&#xff0c;写了如下源代码&#xff1a; from bs4 import BeautifulSoup import requests urlhttps://www.tripadvisor.cn/Attractions-g60763-Activities-New_York_City_New_York.html wb_datereque…