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

比冒泡算法还简单的排序算法看起来满是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

海外院线复仇者联盟4时长超3个小时IT之家3月24日消息此前外媒报道,复仇者联盟4终局之战导演罗素兄弟称,复联4影片长度可能达到三个小时,这是有很多故事的大电影。近日,来自海外院线的消息显示这部影片的时长确实达到了复仇者联盟4预告暗示4月上映,看看网友乐高自制版IT之家3月24日消息3月14日,漫威公布复仇者联盟4终局之战第三支预告片,结尾处暗示这部影片将于4月份全球上映。在影片正式上映之前,日本名为HuxleyBergStudios的Y漫威复仇者联盟4港版海报曝光灭霸响指下幸存英雄最后集结IT之家3月23日消息近期漫威超级英雄电影复仇者联盟4曝光了一款港版海报。在海报中,在灭霸响指下幸存下来的的复联成员们全部集结。海报上赫然写着4月24日(三)最后集结的字样,香港观复仇者联盟4公布新电视版预告,终局之战一触即发IT之家3月22日消息今天凌晨,漫威公布了一段复仇者联盟4新的电视预告片,在这30秒的视频中,复联成员承认自己的失败。随后,那些幸存的复联成员再度集结,准备发动最后的攻击。复仇者联复仇者联盟4配乐已完成,罗素兄弟晒合照IT之家3月23日消息罗素兄弟今日发推特称复仇者联盟4的配乐工作已经完成,并晒出了与配乐团队的合照。罗素兄弟在推文中称,我们职业生涯中最大的闪光点之一就是与AlanSilvestrNASA考虑向太空游客出售坐票搭乘国际空间站飞船北京时间11月20日消息,美国宇航局(NASA)正考虑在执行将宇航员送往国际空间站任务时,向私人游客出售飞船座位的可能性。此举类似于俄罗斯此前接受太空游客的方式。NASA此举在向公波音737MAX有望下周试飞,CEO称软件系统设计没有缺陷IT之家4月30日消息据中新社报道,波音公司首席执行官丹尼斯米伦伯格出席了2019年度股东大会,并召开了新闻发布会。丹尼斯在会上多次重申,飞机软件系统的设计没有缺陷。丹尼斯米伦伯格老人嫌下机慢开应急舱门被拘10天IT之家5月1日消息据南方都市报消息,近日,浙江舟山一班机飞抵普陀山机场刚停下,一老人(宋某)突然打开应急舱门想下飞机,后发现下面没梯子,又返回机舱。据了解,4月21日6时56分,浙江外卖在线上线可看到后厨直播IT之家7月7日消息据浙江省市场监督管理局官微消息,昨日浙江外卖在线正式上线,实现了网络餐饮从后厨到餐桌从加工到配送从线上到线下从商家到骑手全链条闭环管理。据悉,消费者在外卖平台,美团外卖回应系统故障问题系统升级导致IT之家7月6日消息今日,美团外卖崩了一事引发网友热议。有网友表示,美团外卖一直提醒用户访问出错,稍后再试,需要多次提交订单才能完成付款。IT之家了解到,对此美团外卖官方回应称,由美团外卖批量投放智能安全头盔与手机无线连接,骑手可语音处理订单IT之家6月24日消息为了进一步提升骑手配送安全与体验,日前,美团外卖在湖南广东辽宁宁夏等省份批量投放最新研发的智能安全头盔。该头盔在现有头盔经过了强度等四项安全测试符合国家相关标
戴尔出售网络安全业务RSA,作价20。8亿美元2月19日消息,据国外媒体报道,戴尔科技公司(DellTechnologiesInc。)已将旗下网络安全部门RSA出售给由私募公司SymphonyTechnologyGroup加拿报告春节期间王者荣耀日活跃用户达9535万IT之家2月12日消息今天上午,QuestMobile发布了2020中国移动互联网战疫专题报告。数据显示,从1月23日开始,全网用户每日使用总时长节节攀升,从原来的50亿小时,一路网友质疑洛阳某小学试卷给华为做广告,命题老师回应称无商业合作IT之家2月12日消息据新京报消息,洛阳市涧西区20182019学年第一学期五年级语文期末考试卷第一大题的4道题目均与华为手机有关,网友质疑这是给华为手机变相做广告。新京报记者证实使用几分钟降解500年,我国一次性塑料吸管年底将全面禁用感谢IT之家网友刺客的线索投递!IT之家7月14日消息据央视财经微信公众号消息,今年1月,国家发改委生态环境部发布关于进一步加强塑料污染治理的意见,规定到2020年底,全国范围餐饮新西兰推出可以吃的咖啡杯,有望每年减少1500万个纸杯的使用IT之家12月8日消息近日新西兰航空为了环保和减少一次性咖啡杯制造出的垃圾,决定在在飞机上和机场贵宾厅推出可以吃的咖啡杯。新西兰航空贵宾厅经理斯特拉托斯斯坎伦表示,我们每天早上需要英国汉堡王取消塑料玩具,预计每年可省320吨一次性塑料IT之家9月22日消息据Thedieline报道,9月18日汉堡王在英国宣布一项名为熔化的活动,将正式取消儿童餐中的塑料玩具,以减少塑料制品。据了解,汉堡王与回收公司Pentato105万奔驰铭牌系伪造,车主要求退一赔三IT之家8月24日消息据大参考消息,2018年3月,刘先生在河南汇星行花105万元订购了一辆奔驰GLS450越野车。不料,在办理车辆登记时,他发现车辆铭牌存在伪造,上面写的是201美副总统要求5年内送人上月球,NASA需要加钱网易科技讯4月3日消息,据TheVerge报道,美国宇航局(NASA)原定于2028年将宇航员重新送上月球,但美国副总统迈克彭斯(MikePence)却将最后期限提前至2024年。苹果CEO库克微博送出新春祝福祝大家牛年健康,平安快乐IT之家2月12日消息今年是牛年大年初一,苹果CEO库克通过微博向网友们送出新春祝福,他写到祝大家牛年健康,平安快乐。除了库克之外,比尔盖茨昨天也曾发视频发布了新春寄语,在新春寄语监控公司Verkada确认遭大规模黑客入侵已通知FBI北京时间3月11日消息,监控摄像头公司Verkada周三表示,公司已就大规模黑客入侵事件联系了美国联邦调查局(FBI)。黑客通过入侵攻击获得了15万个摄像头的监控视频,导致Verk国务院线宽小于28nm经营期15年以上集成电路企业免征10年企业所得税IT之家8月4日消息刚刚,国务院关于印发新时期促进集成电路产业和软件产业高质量发展若干政策的通知全文公布,该通知指出,国家鼓励的集成电路线宽小于28纳米(含),且经营期在15年以上