范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

比冒泡算法还简单的排序算法看起来满是Bug的程序,居然是对的

  程序 bug 也能负负得正吗?
  还真可以。
  比如程序员们再熟悉不过的排序算法,通过两个"bug"居然能歪打正着,实在令人匪夷所思。
  请看这位程序员写的数组升序排序代码:
  今天这串代码在 Hacker News 论坛上突然火了起来,引来大批程序员围观。
  乍一看这段代码,你的反应会是什么?会不会觉得这个程序员水平太差了,连基本的冒泡算法都写不好:
  不等号方向错了,第二层循环指数 j 的范围也弄错了。
  总之,这段代码"绝对不可能正确"。
  △冒泡算法
  但如果你真的运行一下会发现,结果还真的是按照升序排列的。
  我们再来看一下正确的冒泡算法代码是怎样的:
  后者不同之处是 j = i + 1 且 A [i] > A [j] ,两段程序大相径庭。
  然而我要告诉你一个不可思议的事实,其实第一串代码是对的,而且可以严格证明。
  那么它是如何实现正确排序的?为何能歪打正着
  仔细一想,其实很容易理解。因为该算法比冒泡排序多一半交换操作,正好可以将降序变成升序。
  不过,作者还是给出了严格的证明。
  我们定义 Pᵢ是经过 i 次(1 ≤ i ≤ n)外循环后得到的数组。
  如果算法正确,那么前 i 项已经是升序排列,即 A [1] ≤ A [2] ≤ . . . ≤ A [i]。
  证明该算法正确,实际上就是证明 Pₙ对于任何 n 都成立。
  根据数学归纳法,我们只要证明 P₁成立,假设 Pᵢ成立,接着再证明 Pi+1 也成立,命题即可得证。
  P₁显然是正确的,而且这一步和普通的冒泡算法降序没有区别,经过第 1 次外循环,A [1] 就是整个数组的最大元素。
  接着我们假设 Pᵢ成立,然后证明 Pi+1 成立。
  我们先定义一个序数 k:首先假设 A [k](k 介于 1~i 之间)满足 A [k]>A [i+1] 最小的一个数,那么 A [k−1]≤A [i+1](k≠1)。
  如果 A [i+1]≥A [i],那么这样的 k 不存在,我们就令 k=i+1。
  考虑以下三种情况:
  1、1 ≤ j ≤ k−1
  由于 A [i+1]>A [j],没有任何元素交换发生。
  2、 k ≤ j ≤ i (如果 k=i+1,则不存在此步骤)
  由于 A [j]>A [i+1],所以每次比较后都会有元素交换发生。
  我们使用 A [] 和 A′[] 来表示交换前和交换后的元素,所以
  A′[i+1] = A[k],A′[k]=A[i+1]
  经过一系列交换,最大元素最终被放到了 A [i+1] 位置上,原来的 A [i+1] 变成了最大元素,A [k] 被插入了大小介于原来 A [k] 和 A [k-1] 之间的元素。
  3、i+1 ≤ j ≤ n
  由于最大元素已经交换到前 i+1 个元素中,此过程也没有任何元素交换。
  最后,Pₙ就是升序排序算法执行完以后的结果。
  由于内外两组循环没有任何范围差别,因此这可以说是"最简单"的排序算法了。
  从代码上来看,它很像冒泡算法,但从证明过程中可以看出,这实际上是一种插入算法。
  ▲插入算法算法复杂度
  显然,该算法总会进行 n² 次比较,接下来计算算法的交换次数。
  可以证明交换其次最多为 I+2 (n-1),最少为 n-1。
  其中 I 为初始数字的逆序数,最大为 n (n-1)/2
  因此整个算法的复杂度为 O (n²)。
  从证明过程中可以看出,除了 i=1 的循环以外,其余循环里 j=i-1 之后的部分完全无效,因此可以将这部分省略,得到简化后的算法。
  该算法减少了比较和交换次数,不过算法复杂度依然是 O (n²)。网友:这个算法我以前见过
  比最容易理解的冒泡算法还要简单,这个排序算法在 Hacker News 上很快引起了网友的围观。
  不少人觉得它"很眼熟"。
  有位网友表示,自己曾在奥林匹克数学竞赛中看到一个同学用了一种非常奇怪的排序算法,它可以运行但是效率很低,更像是一种插入排序。
  如果我没记错的话,他用的就是这种算法。
  事实上,关于这种算法的讨论已久,从 2014 年开始就不断有人发帖,这次作者将论文上传到 arXiv 后又引起了广泛热议。
  甚至还有乌龙事件发生。
  有位网友扫了一眼论文就以为这个算法和自己 10 年前提出的一样。
  留言网友的算法:
  乍一看两种算法的代码确实很像,原理上的确有些相似。
  都是看起来像冒泡排序,但其实更贴近选择排序。
  不过很快有人指出真相:这种算法中 j=i+1 to n,并且是当 A [i] > A [j] 时交换。
  而作者提出的算法中 j=1 to n,A [i] < A [j] 时交换。
  两种算法相比,网友此前提出的更容易被理解为什么可以运行。
  当然也有歪楼的,有人就调侃自己刚学编程时写过这个算法。
  我百分百确定,在我刚开始学编程、并想要找到最短的排序方法时就写过它。
  不过说到实际应用上,这种算法需要的计算时间太长了。
  有人就认为,这种算法此前被发现过很多次,但是那些人根本没打算用它。
  也有人提出:这种排序没有睡眠排序简单。
  睡眠排序就是构造 n 个线程,让线程和排序的 n 个数对应。
  例如对于 [4,2,3,5,9] 这样一组数字,就创建 5 个线程,每个线程睡眠 4s,2s,3s,5s,9s。这些线程睡醒之后,就把自己对应的数报出来即可。这样等所有线程都醒来,排序就结束了。
  但和作者提出的算法一样,睡眠排序由于多线程的问题,在真正实现上也有困难。
  此外,这位网友也表示自己看到过这种算法:
  我确定我此前看到过这种算法,它没有名字吗?
  很快就有人提议说 ——
  如果它没有名字的话,我建议称之为‘面试排序’。
  参考链接:
  [1]https://news.ycombinator.com/item?id=28758106
  [2]https://arxiv.org/abs/2110.01111

滴滴回应司机持刀伤人乘客要求超速行驶引发冲突新浪科技讯11月12日下午消息,针对近日的南京滴滴快车司机持刀伤人事件,滴滴方面回应称,为乘客在行程中要求司机超速行驶而引发冲突。据媒体报道,近日南京发生一起滴滴快车司机持刀伤人事亚马逊提升开店审核难度,大批卖家收到邮寄明信片验证真实地址北京时间5月8日早间消息,据报道,美国消费者新闻与商业频道(CNBC)报道,亚马逊正在使用老式的邮寄信件方式,以确保其平台上的卖家确实住在他们声称住的地方。去年9月份亚马逊要求第三副处长体验当骑手引热议,美团饿了么回应已逐步取消对骑手逐单处罚IT之家4月29日消息北京卫视播出的一档纪录片显示,北京人社局副处长拜师外卖小哥,体验送外卖的一天,最终他送单12小时只赚了41块,相当于一小时挣不到三块钱,他感慨这个钱太不好挣。美版知乎Quora遭黑客入侵1亿用户姓名密码等信息受影响北京时间12月4日上午消息,美国社交问答网站QuoraCEO亚当德安杰洛(AdamD39Angelo)周一发表题为Quora安全更新的博文,披露该公司遭遇重大安全问题,导致1亿用户马化腾时隔三年再现知乎深夜灵魂拷问IT之家10月24日消息昨天晚上23点54分,认证为腾讯CEO的知乎账号ponyma更新了知乎动态,并且在知乎上提出了第二个问题未来十年哪些基础科学突破会影响互联网科技产业?产业互韩国新规下周生效,Netflix和谷歌等的服务不稳定将遭罚款韩国一项将于下周生效的法律修正案,对Netflix和谷歌等跨国互联网内容服务商提供服务的稳定性提出了新的监管规定,未遵守者将面临罚款处罚。本周早些时候,韩国通过了电信业务法条例的修腾讯推出全新社交产品去聊,定位陌生人社交12月23日,据36氪报道,腾讯近日冷启动了一款全新的社交产品去聊,这是一年多时间内,腾讯继轻聊有记欢遇朋友猫呼回音轻缘灯遇交友Hood后的第10款社交产品。这款名为去聊的App,索尼启动人工智能无人机项目,并注册Airpeak品牌11月10日消息,索尼日前宣布,将以人工智能(AI)机器人技术为依托启动一个全新的无人机项目。图片来自索尼官网索尼已为该项目注册了Airpeak这一品牌。索尼表示,将致力于通过在无攀升推出高达联名版电竞显示器27英寸2K165Hz,到手价1499元IT之家11月10日消息攀升现已推出高达报丧女妖联名电竞显示器,27英寸2K高清144hzIPS屏,原生165hz高刷新率,预售到手价仅1499元。IT之家了解到,这款攀升与高达的三省运营商发布智能电视盒腾讯先游TV版微信QQ登录,一键云游戏IT之家3月5日消息根据腾讯游戏的官方的消息,湖南广西重庆三省运营商正式发布智能电视盒腾讯先游TV版,腾讯表示,腾讯先游与三省运营商合作,依托强大的云游戏技术为用户提供云游戏定制化消息称OPPO与vivo将为离职员工补发年终奖,此前遭克扣7月1日消息,有网友在社交媒体爆料称OPPO与vivo将为之前年终奖到手比较少的离职员工,补发年终奖。脉脉上的话题有网友发文称此前中层领导克扣了员工的年终奖,有员工把事情反映到了内
海关总署无人机国际贸易归类为会飞的照相机感谢IT之家网友软媒用户1237944的线索投递!IT之家11月5日消息无人机到底是会飞的照相机还是带照相机的飞行器呢?根据海关总署的消息,世界海关组织协调制度委员会认定,中国的大每GB价格1。75元印度流量资费全世界最便宜北京时间3月11日下午消息,宽带统计网站cable。co。uk最新分析显示,印度是世界上移动数据(流量资费)最便宜的国家,而前20最便宜国家中有10个位于亚洲大陆。对230个国家的国家网信办等四部门发布云计算服务安全评估办法IT之家7月22日消息今日,国家互联网信息办公室国家发展和改革委员会工业和信息化部财政部制定并发布了云计算服务安全评估办法(以下简称评估办法),旨在提高党政机关关键信息基础设施运营微博开启涉黄低俗信息专项清理行动从重处置大号带小号等行为IT之家7月4日消息今天上午10点,新浪微博宣布开启涉黄低俗信息专项清理行动,为期两个月,行动命名为蔚蓝计划。新浪微博表示,蔚蓝计划将采取技术审核过滤人工主动巡查用户投诉等方式对涉范冰冰李晨分手,微博搜索又宕机IT之家6月27日消息今晚,范冰冰和李晨宣布结束恋人关系,随即微博搜索再次宕机。范冰冰与李晨两人委婉宣布分手后,相关话题迅速登顶微博热搜榜第一,进而导致微博搜索出现异常。据了解,李微博蹦迪朋友圈装死,你究竟有多在意别人的感受?有一句话叫做在微博里蹦迪,也在朋友圈里装死,这句话其实大部分可以解释很多年轻人的社交状态,微信里打卡,以及应付社交,而在朋友圈里则能和热点互动,发一发自己的最近状态,这些网友们在朋网易发布白金卡潮玩版月费19元,送两年黑胶VIP感谢IT之家网友软媒用户1549253的线索投递!IT之家9月24日消息近日,网易与中国电信联手白金卡潮玩版套餐。网易白金卡潮玩版提供网易云音乐网易新闻百度百度贴吧爱奇艺等网易系百改革开放40年百名杰出民营企业家名单发布马云马化腾李彦宏均入选感谢IT之家网友刺客的线索投递!IT之家10月24日消息据人民日报客户端消息,在改革开放40周年之际,宣传民营经济发展巨大成就,展示民营企业家中国特色社会主义事业建设者风采,中央统阿里辟谣收缩招聘人才体系升级,让年轻人破格晋升10月23日下午消息,针对今日网传阿里巴巴全面缩减人员编制的消息,阿里官方辟谣称,这只是阿里近期的一次人才盘点和人才体系升级。近日,有应聘者在职场社交应用上留言表示阿里已全面缩减人五一火车票明起开抢,12306崩了据不少微博网友反映,12306疑似出现服务器故障,无法购买车票。IT之家了解到,按照目前全国铁路车票预售期15天的规定,4月16日起,旅客可购买4月30日的火车票。4月17日则正式菠菜最强代言人!漫画人物大力水手波派90岁生日快乐IT之家1月17日消息今天是漫画人物大力水手波派90岁的生日。1929年1月17日,波派首次以配角的身份登场,却意外走红,依靠菠菜成功出道。大力水手波派有个爱惹麻烦的女友奥利弗,而