首页 » Web技术 » PHP » 正文

一些因愚蠢而成名的代码

这也是一个发布在 Quora 上的问题,下面是原问题:

有哪些代码是因为愚蠢而出名的呢?

下面我们从回答列表中为大家整理几个其中获赞最多的回答。


1. @Leon Zhou:(6100+赞)

Bogosort 是一个非常著名的列表排序算法,它是这样的实现原理:

  • 把列表中的元素随机打乱顺序排放
  • 检查是否已经是有序列表了,如果不是,重新开始。

Bogosort 算法平均运行次数为 O((n+1)!),非常糟糕。这也是一个罕见的没有最坏情况下运行次数的算法。如果列表中至少有两个元素,那么它也可能无限时间的执行运算。


2. @Greg Kemnitz:(601赞)

我最喜欢的必须是Bubble sort(冒泡排序),过去的数年时间内我一直在让没有学过计算机科学却在学习编程的航天工程师避开和替换使用冒泡排序,我甚至把这作为我的一个小小的事业来做。又一次我用堆排序来替换冒泡排序,把一个需要运行一周时间的模拟算法减少到两个小时。

典型的理由是,冒泡算法很短且很简单,所以它必须是“更好的”。在其他基本上相同的情况下,这似乎是一个不错的推理,但在冒泡排序这里却并不适用。

此外,冒泡排序在很多初级的编程课程中似乎经常被提到,如果学生不学习其他编程类的话,这可能是他们所知道的唯一的算法。


3. @Thomas Wolf:(564赞)

我会把“steam locomotive”(蒸汽机车)程序列出来。所有 *nix 用户应该都知道,在 shell 中经常会使用 “ls” 程序来列出文件夹中的内容。有时候你可能因输入太快而错误的输入成 “sl”,这样会执行“steam locomotive”,会有一个小火车穿过你的终端的ASCII动画。火车的汽笛声会通过喇叭广播出来,让周围的人都知道你做了什么,但它可能不依赖系统。

steam-locomotive

sl 与 ls 有相似的命令行选项:

  • sl -a:似乎发生了事故,你会同情那些哭求帮助的人
  • sl -l:显示一个小一点的火车
  • sl -f:速度飞快
  • sl -e:允许通过 Ctrl+C 来中断

最后一个会覆盖掉默认输入 Ctrl+C 不会中断的情况。这个程序似乎是“训练”你不要输入 sl。

我在一个视频中见过一个 sl 程序的变种,它大约要消耗你两分钟的时间,它会显示一个闪烁的效果,速度非常慢,然后会有一个很长的火车经过你的终端。


4. @Saarthak Sachdeva:(540赞)

睡眠排序:这是一个在 4chan 上走红的非常简单的代码,它是愚蠢还是巧妙,取决于你怎么来看待它。它背后的逻辑非常简单,下面的它的伪代码:

procedure printNumber(n)
    sleep n seconds
    print n
end

for arg in args
    run printNumber(arg) in background
end
wait for all processes to finish

它会为数组中的每一个整数创建一个线程,然后放到后台运行。线程会等待 N 秒然后打印该整数。这意味着最小的数等待时间最短,并最先被打印出来,最大的数等待时间最长并最后打印出来。

换句话说,如果有一个 1 到 20 的数组,随机排序,1 的线程会等待 1 秒,2 的会等待 2秒,依此类推。最终,就会得到排好序的数组。这是一个非常滑稽但却很有效的算法,但目前并没有得到很好的证明,因为它需要硬件的支持。

参考:Genius sorting algorithm: Sleep sort

伪代码来源:http://www.quora.com/What-is-sleep-sort/answer/Albert-Sheu

未经允许,禁止转载。

本文共 2 个回复

  • cc 2016/02/03 11:08

    你的参考链接出错了

    • Specs 2016/02/03 11:11

      @ cc 原答案中是给出的这个,可能是时间比较久了,原链接失效了。我在那个网站找了下,没有找到相关的这个链接~

发表评论