【生活當中的演算法】如何一次排序、分類500本書?工程師請回答

插2

【我們為什麼選這本書】
生活當中不論是搜尋引擎、導航系統、資料安全、網路約會或是大學名額分配都隱藏著演算法,就連當今最先進的遊戲引擎──魔域幻境4 (Unreal Engine4),也運用了演算法彩繪了巴黎一棟公寓建築,其圖像與設計師品牌家具的廣告照片不相上下,不要以為演算法只是網路跟電腦這些枯燥的內容,到底潛伏在哪些生活當中,讓我們一起來看看!(責任編輯:辜秋兒)

在日常小聰明裡還藏著比我們想像中更多的演算法。但如果日常小聰明就足夠的話,我們何必還跟演算法拉扯呢?其實,有時候日常小聰明挺麻煩的。我們現在再次拿起電話簿,在這裡二元搜尋法之所以有效,是因為電話簿裡的電話號碼是已經分類好的。要是誰想在我完全沒有整理的名片堆裡找出一個電話號碼,就得一路亂翻到底了。一個對於演算法來說很實用的資料庫,我們稱之為「資料結構」(Data structure)

電話簿裡的名字和電話號碼是連在一起,且按照字母順序排序好的,因此演算法的「二元搜尋」才能發揮功能。好心的電話簿出版公司職員幫我們把一切都排序好了。今天換種狀況,同個問題的另一種問法就會是:「你怎麼重新整理搬家時被好心的朋友擺亂的書架?日常小聰明怎麼整理一整面書牆?」
這樣如何:一開始把所有書都堆在地上,然後找出應該放在書架左上角的那本書,也就是「第一本書」。把它上架之後,再繼續在書堆中尋找下一個「第一本書」。如此持續下去。每找一本書,就在地上的書堆裡再找遍一次,好找到下個「第一本」。

為了找到當下的第一本書,就必須確認所有的書一次。為了排序,每有一本書要上架,就得看一次所有剩餘的書。如果有500本書,為了找出第一本書,就得比較499次,接著為第二本書比較498次……結果總共需要差不多250x500次的比較次數。我們乾脆算500x500好了,總共是二十五萬次。

我看還是這樣好了。把所有的書上架,先隨便擺,然後從後面開始,只要有兩本書位置不對,就馬上對調位置。這樣的話只需確認500本書一次而已。是可以這樣做沒錯,不過這不算真的開始排序,因為你得再從後面調換書本的位置,一次、一次,然後再一次,大概總共需要500次。書本像泡泡一樣從書架下方往上冒,如同汽水裡的氣泡一樣。所以這種程序被稱為「冒泡排序」(Bubble Sort)。用冒泡排序整理500本書需要的功夫,差不多也是500x500次。

用於排序的演算法有很多種,有的巧妙實用,有的卻很麻煩。上述兩種是屬於麻煩型的。有個很棒的程序是,無論你從哪裡開始都可以,只要找出以A開頭的書本,然後從中找到這本和演算法有關的書。之後開始閱讀這本書,你只需要讀到剛開頭不久書本教你如何排序那裡。

現在我們來介紹一個巧妙實用的排序法:假設你不是自己一個人搬家,而是和另一個人一起搬進共同的新家。你們兩人帶來差不多數量的書籍,總共500本。然後你們兩人把自己的書一絲不苟地按照書名排序完畢,整齊堆疊在地上。現在,該如何把兩堆已經排序好的書合併起來呢?

幾乎所有的演算法都很簡單,問題是哪些簡單的演算法是實用的呢?到底需要耗費多少工夫,才能夠把委派任務完成?作者並提到了「層級制排序法」人們稱為「合併排序」(Merge Sort),英文的Mergen意指合併、融化,也點出了演算法式的思考是人類思考的一部分,我們在意的是培育這個天賦本能。意識自身的能力然後栽培它,是人類很自然的作為。

此書從簡單的例子出發,作者以生動有趣的方式,幫助想要了解大數據和演算法是什麼卻不想折磨自己的科普讀者,更易於瞭解無所不在的演算法。

(八旗)0UAL0012演算法星球-立體書封+書腰300

(本文書摘內容摘錄自《演算法星球:七天導覽行程,一次弄懂演算法》,由合作夥伴八旗文化授權轉載,並同意TechOrange編輯導讀與修訂標題。圖片來源:八旗文化)

——————————————

這幾年機器學習、AI 人工智慧等詞彙人人琅琅上口,想要了解人工智慧的基礎,就是資料科學嗎?講座將會開放與會、讀者直接面對面請教專家,更深入地了解相關名詞與實際操作,千萬別錯過跟上 AI 人工智慧趨勢!

AI_600x100--for web
[kktix]https://kktix.com/tickets_widget?slug=taiwan-2016arvr-2f9f11-58e948[/kktix]

AD