當前位置:
首頁 > 最新 > 躺著也能學演算法!

躺著也能學演算法!

演算法在編程世界的地位到底有多高?看這句話:編程的本質是演算法,演算法的本質是解決問題,解決問題的本質是令人興奮的成就感(搞定了?爽爆了!)... 演算法如此重要,到底怎樣學習演算法呢?估計每位程序員都能說出一些心得和體會。然而,一位混跡矽谷的程序員歐巴告訴我們:演算法是編程界的元能力,這種元能力是躺著就能學會的!但是,不能速成哦。而且,歐巴認為,這種元能力是要儘早培養的!每天晚上睡前讀讀歐巴寫的這本火遍韓國編程圈的《枕邊演算法書》,再將歐巴的這種思維運用到日常的編程工作中,假以時日,即可習得演算法元能力。

你內心肯定想,動手是編程能力習得的關鍵,我就不信這個邪,咋還能躺著學演算法?接下來,咱們來看一篇文章,這篇文章的主題是「問題在於演算法」。

高校不應該只注重培養學生的編碼能力,而應當想辦法培養能夠利用演算法解決問題的能力。

像紋身一樣,我們可以通過MOOC、培訓班、研究小組等方式學習編碼技巧,必要時可以『抹去』。

但與自身融為一體的演算法能力將會限制程序員的整體能力,因此,要在適當的時機掌握適當的知識,錯過就很難再習得。

當今時代,技術飛速變化,從屬於特定技術、平台、語言、API的編碼技術的價值已大不如前,反倒是捨棄舊技術而掌握新技術的能力顯得更加重要。

戰鬥機的生命力在於其快速改變方向的機動力,程序員的生命周期也取決於是否具備能夠迅速改變編碼方式的能力,而演算法正是培養這種能力的『元能力』。

基於上述原因,美國的IT公司(除特殊情況外)在人才僱用方面並不會過多考慮精通特定技術或API的編程人員,而更傾向於在擁有基本能力(解決問題的能力,即演算法)的基礎上可以快速學習新技術並能應用於實際問題的人才。

就像美劇《矽谷》中,主人公並不是非常高明的黑客或Java專家,而是一名開發過文件壓縮『演算法』的普通程序員。

軟體編程技術由名為『演算法』的『細胞』組成,存在於『演算法細胞』內部的『DNA』就是邏輯。

對任何事都具備邏輯思維的人能夠編寫非常優秀的代碼,而缺乏這種邏輯能力的人無論多麼努力學習『編程』也無濟於事。

對於軟體開發人員而言,學習演算法的目的不應僅定位於就業或得到更高職位,而應該像玩拼圖或猜謎語一樣,使學習成為一種有趣的遊戲。

有一本書就是採用了這種趣味性的方法講演算法的邏輯思維,受到了廣大讀者的歡迎。

下面先來感受下書中用猜謎語講實現演算法的過程,希望各位以「高手」(不異想天開,試圖通過一兩個步驟就找到正確答案,而是向著最終答案一步一個腳印地前進)的姿態,細細品味下面這道題。

「從前,有個小島上只住著和尚。有些和尚的眼睛是紅色的,而另一些的則是褐色。紅色眼睛的和尚受到詛咒,如果得知自己的眼睛是紅色的,那麼當晚12點必須自行了斷。(因為受到詛咒,所以只要得知自己的眼睛是紅色的,則必須選擇自殺,無一例外。)」

和尚們之間有一條不成文的規定,彼此不能提起對方眼睛的顏色。小島上沒有一面鏡子,也沒有可以反射自己容貌的物體。因此,沒有任何人能夠得知自己眼睛的顏色。出於這些原因,每個和尚都過著幸福的日子,也沒有一個和尚自殺。

有一天,島上突然來了一位遊客,她對這個秘密並不知情。於是,這位遊客對和尚們說:

「你們當中,至少有一位的眼睛是紅色的。」

這位無心的遊客當天就離島而去,而和尚們卻因第一次聽到有關眼睛顏色的話題而惴惴不安。當晚,小島上開始出現了可怕的事情,究竟是什麼事呢?

此題不簡單卻非常有意思,而一旦知道答案,又會覺得並不太難。

這並非是那種荒謬的問題,要想解開需要一些邏輯推理,所以不要試圖一下子解開。我們應當從最簡單的線索著手,進行一些最簡單的假設,然後逐步推理。如果各位已經知道答案,那就暫且不論;如果是不知道答案的讀者,請先用2分鐘時間獨立思考。在此重申,解決這種謎題類問題的過程與實際編程中尋找適當演算法的過程非常類似。

if ( ( 思考時間 > 2分鐘) || ( 已經知道答案了嗎) )

{

跳轉至下一段

}

else

{

返回上一段,並至少思考2分鐘

}

下面查看正確答案。遊客說「至少有一個人」的眼睛是紅色的。

1. 假設島上的和尚中沒有任何人的眼睛是紅色,那麼會怎樣呢?

這種情況雖然最簡單,但會產生最嚴重的後果。若沒有一個和尚的眼睛是紅色的,那麼對他們來說,除了自己以外,看到的其他和尚的眼睛都是褐色。因此,每個和尚都會認為自己的眼睛是紅色的(實際上是褐色)。可想而知,所有和尚當晚都會自殺。

2. 如果只有一名和尚的眼睛是紅色的,會出現什麼結果呢?

除了這名和尚外,其餘和尚都知道誰的眼睛是紅色的,那麼這些褐色眼睛的和尚當然不會自殺。而那位紅眼和尚因看到其他和尚的眼睛都是褐色的,就會判斷出自己眼睛的顏色,進而選擇自殺。

接下來再考慮稍微複雜一些的情況。

3. 假如有兩個紅眼和尚,會有什麼樣的結果呢?

現在開始的推理是為了得到本題答案而進行的核心推理部分。(開始時沒有考慮過這種情況的讀者,現在請仔細思考:若有兩個紅眼和尚,會發生什麼樣的事情?)遊客說「至少有一個」和尚的眼睛是紅色的,所以兩個紅眼和尚都會以為說的是對方。

這兩個和尚都會想:「那個紅眼的傢伙今晚就要自殺嘍。」並安然入睡。不過,因為兩人都這樣想,所以都能看到第二天的太陽。當這兩位和尚相互碰面並看到對方沒有自殺時,都會受到極大的打擊。

此時,二人都會意識到,紅眼和尚有兩個而非一個,而且另一個正是自己。除此之外的任何情況都不可能讓對方在第一個晚上不自殺而安然入睡。結果,受到打擊的兩個和尚會在第二天晚上都悲慘死去。

下面再考慮更加複雜的情況。

4. 如果有3個紅眼和尚,又會怎樣呢?

平時,這3位會看到兩個紅眼和尚,所以聽到遊客的話後,都不會選擇自殺。第一晚過後,他們又會想,另外兩個和尚(紅色眼睛)第二天晚上會同時自殺(根據前面探討的「有兩個紅眼和尚」的情況)。像這樣,這3個紅眼和尚都會認為另外兩個紅眼和尚會同時自殺,而根本不會想到自己也是個紅眼和尚。

到了第三天早上,看到本以為會自殺的另兩個和尚並沒有自殺時,根本沒想到自己也是紅眼和尚的這3人會同時受到極大的打擊。因為,兩個紅眼和尚第二天晚上也沒有自殺,這就表明還有一個紅眼和尚,而這第三個紅眼和尚正是自己。(除兩個紅眼和尚之外,他們平時看到其他和尚的眼睛都是褐色的。)

5.這種邏輯會反覆循環。

因此,該題的答案是「若小島上共有n個紅眼和尚,那麼第n個晚上這些和尚會同時自殺」。例如,小島上共有5個紅眼和尚,那麼第5個晚上,這5個紅眼和尚會同時自殺。

實現演算法的過程與猜謎語非常相似,無論編寫演算法還是猜謎語,首先都需要掌握問題本身的意思。其次需要了解開始解題的第一個步驟,就像是在看不見路的地方捕捉線索,以獲知前進的方向。了解第一個步驟後,接下來就需要一步一步向著問題的最終答案前進。

不僅僅是解謎題,書中還有很多很多有趣的內容。本書的寫作目的並不是想「介紹」演算法理論或對演算法進行「講解」,而是想通過與專業編程人員進行「日常對話」,創造機會,使讀者了解我們每天完成的「工作」多麼有趣、多麼美好、多麼具有創造性。

林栢濬 著 / 崔盛一 譯

¥ 45.00元

《枕邊演算法書》的重點在於「枕邊」,而不在於「演算法書」。人最幸福的時刻就是完成所有工作後,拿著一本通俗小說(或漫畫)入睡。書名中的「枕邊」旨在說明,這是一本能夠營造最自在、最愉悅時刻的有趣讀物。

本書入選了韓國「2016年度圖書」!

它能夠改變編碼方式,還能培養演算法「元能力」(能夠迅速改變編碼方式的能力),延長技術生命周期。

針對就業、升職、自我提高等不同階段需求,緊跟新技術發展趨勢,面向更廣大人群。

來看看這本圖書的目錄,你就知道作者軀殼裡裝的是一個有趣的演算法靈魂!

目錄

第1章 爵士樂開啟晨間香氣

1.1 枕邊的演算法

1.2 用謎題解開演算法世界

1.3 定義數據結構

1.4 輸出P的程序P

1.5 找出隱藏的Bug

1.6 設計精妙演算法

1.7 迴文世界

1.8 康威的末日演算法

第2章 搖滾樂伴隨正午活力

2.1 排序演算法

2.2 搜索演算法與優化問題

2.3 動態規劃法

2.4 散列演算法

2.5 Soundex演算法

2.6 修道士梅森

2.7 程序員的「成就感」本質

2.8 文學編程

第3章 硬核朋克點燃午後激情

3.1 歐幾里得演算法

3.2 遞歸的魔術

3.3 李維斯特、夏米爾、阿德曼的數學遊戲

3.4 RSA演算法

3.5 下午茶時間

3.6 RSA演算法(續)

3.7 3行Perl程序

3.8 賞析黑客們的詩

3.9 2行RSA演算法

第4章 古典音樂帶來夜晚安逸

4.1 N皇后問題

4.2 通過肉眼解答N皇后問題

4.3 藏在問題中的分立的演算法

4.4 遞歸與棧

4.5 Jeff Somers的演算法

4.6 複習位運算符

4.7 2的補碼

4.8 分析Jeff Somers的演算法

參考文獻及網址

索引

●編號614,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

Python編程

更多推薦18個技術類微信公眾號

涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 演算法與數據結構 的精彩文章:

TAG:演算法與數據結構 |