一些因愚蠢而成名的代碼

jopen 8年前發布 | 5K 次閱讀 排序算法

這也是一個發布在 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動畫。火車的汽笛聲會通過喇叭廣播出來,讓周圍的人都知道你做了什么,但它可能不依賴系統。

一些因愚蠢而成名的代碼

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</pre>

它會為數組中的每一個整數創建一個線程,然后放到后臺運行。線程會等待 N 秒然后打印該整數。這意味著最小的數等待時間最短,并最先被打印出來,最大的數等待時間最長并最后打印出來。

換句話說,如果有一個 1 到 20 的數組,隨機排序,1 的線程會等待 1 秒,2 的會等待 2秒,依此類推。最終,就會得到排好序的數組。這是一個非常滑稽但卻很有效的算法,但目前并沒有得到很好的證明,因為它需要硬件的支持。

參考: Genius sorting algorithm: Sleep sort

偽代碼來源: http://www.quora.com/What-is-sleep-sort/answer/Albert-Sheu

未經允許,禁止轉載。

來自: http://9iphp.com/web/php/the-dumbest-code-ever-made-that-has-become-famous.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!