《演算法》這麼好玩,要不聚個群吧
《演算法(第四版)》由Robert Sedgewick、Kevin Wayne所著,大部分內容是由Sedgewick之前寫演算法圖書彙總而來的。這一本全書近650頁的大部頭,第一眼難免讓人產生“知難而退”的想法,但翻開它,就成了你“愛不釋手”的陪伴。Sedgewick師承高德納,這名號也許能讓有興趣的人打消“知難而退”的想法,做做“能與高德納(/Sedgewick)闊談”的白日夢,也許就看完了,而且相信我,一旦開始,本書就像一本不斷開啟新世界大門的鑰匙,而你會迫不及待地用它來找尋一個個新世界。
我算是做著白日夢看完的,從寒假開始到幾周前合上書,當然這幾天也時常回顧、翻看。“看完”後毫無意外,沒有學富五車的自信,雖然本書有很多應用例項,但自我感覺還是像紙上談兵,事實上在實際中還沒法熟練、優雅地應用演算法以及解題。不過演算法實在是太有挑戰、好玩了!不是嗎?
1.行文風格
《演算法(第四版)》全書的行書風格十分流暢,謝路雲老師的翻譯也很贊。本書行書的風格大概是這樣的:概述演算法的性質特點 --> 給出API --> 對每個API中的每個方法實現及分析 -->示例圖進一步分析及複雜度分析 --> 給出實現程式碼 --> 具體應用舉例(並實現)。這樣的風格有什麼好處呢?首先你不會對演算法只瞭解個大概,從一點一點根據API學習,到最後不管是自己根據API手寫,還是照著書上的程式碼碼一遍,都能加強之前每一步的理解,其次API也能在你的腦中留下一個大概的印象,以後可以不斷地按照這個印象來添補。
2.程式碼實現
全書使用Java程式碼實現,這點非常符合我的胃口,當然,如果本書能隨著網站程式碼的更新以及Java版本的更新而更新,我覺得就更好了。目前幾乎所有演算法書,只要不是用虛擬碼,都會加上一句,“放心,這書適合所有人看”,但看完之後才發現,只有自己得心應手的語言,寫出對應的演算法會更容易,除錯起來也比陌生的語言容易很多,關鍵可以結合程式碼去理解,這不失為一個好方法。相信我,虛擬碼更吃力,尤其對於我這種非科班出身的人。所以我個人推薦先用熟悉的語言來學習、入門演算法(儘量全、詳),掌握核心的資料結構和演算法思想,自己實現一遍,再去看《算導》類天書的時候思想更易互相交融與碰撞(天才除外,我是笨人)。當然因為本書的行文風格極其流暢,所以肯定也是適合掌握其它語言的小夥伴用作入門的。全書對程式碼進行了嚴格的API規範限制,並完全按照所給API進行實現,這一思想時常接觸但在學生階段卻用的不多,這也加深了我對軟體工程的理解,包括書中提到的耦合和再利用問題也是非常基本但又很容易忘記去應用的“常識”。
3.詳細圖解
最近好像還是挺流行“圖解”的,好像掛上了這兩個字就有了暢銷一說,而本書幾乎每一個演算法都以“圖解”的方式舉例,最後還不忘了給應用也放個“圖解”,而且全書的圖解是滿滿的乾貨啊!漫畫型別的圖解生動有趣,不過本書乾貨風格的圖解更讓人感到紮實,各有所好,各取所需。有些許可惜的是全書是黑白而非英文版的全綵(關於這點,我個人是以中英文對照看的方式解決的) 。
4.實際應用舉例
大部分人看演算法的第一個問題應該是:“這有什麼用?我不用內功現在也一樣混得很好啊!”,現在以一個“看完”全書的人來評價這個問題或者說是這個態度,我覺得他們實在是應該好好看看本書——因為應用上總會直接或間接用到演算法,雖可不求甚解,但連了解下的態度都沒有,工程又怎麼能經得起考驗呢?而本書每節結尾的總結性應用,更是說明了這一點,(甚至在圖的練習題中還有一個讓你“去外匯市場獲利”的課後習題,可見作者希望我們做實際應用的用心良苦啊!)也是一個讓我堅持看完本書的原因。
對於本書的褒貶評價應該也已經有很多很多了,我對這本書的評價是非常適合入門,由於演算法本身很多東西是長期研究的產物,是精華中的精華,晦澀難懂,註定了這本書不能成為睡前讀物,也算是一個門檻吧。但轉念一想,以往他人研究了那麼久的東西,如今我們一下子就能“看完”,何嘗不是樂趣。掃了一眼已然變舊變厚的書,雖然“看完”了,但把書變薄、消化還需要很久很久,接下來刷題、應用、複習,才算是真正踏上演算法之路。
如果你好思考,愛演算法,這裡有一個小圈子,等你加入!
(潔大坐鎮,圖靈社群的各種獎勵在這裡等著你哦~ 群號:584558813)
相關文章
- CSS魔法堂:Transition就這麼好玩CSS
- 我的遊戲這麼好玩,為什麼賣不動?遊戲
- Linux好玩的:給GRUB2載入程式給個背景吧Linux
- 這個演算法怎麼實現???演算法
- QPS這麼高,那就來寫個多級快取吧快取
- 好玩兒的演算法演算法
- 輔導作業這麼費勁的事,還是交給這個大模型吧大模型
- chapter8:聚類---群組發現APT聚類
- 這不會又是一個Go的BUG吧?Go
- 想學嵌入式?要不一起玩 Arduino 吧UI
- 這些奇怪的排序演算法,你沒見過吧?排序演算法
- 聚類演算法聚類演算法
- 用過 mongodb 吧, 這三個大坑踩過嗎?MongoDB
- 我也談談這個執行力吧薦
- 部落格園又崩了,這個鍋要不要阿里雲背?阿里
- 這麼優雅的Java ORM沒見過吧!JavaORM
- 【蟻群演算法】演算法
- 這不算爬蟲吧?!爬蟲
- 這個好玩又實用的jupyter外掛我真的愛了
- 這 5 個簡單的面試題,把群炸了面試題
- Laravel的這10個用法,你都沒用過吧!!Laravel
- 聚類的基本問題及兩個常用演算法聚類演算法
- 聚類之K均值聚類和EM演算法聚類演算法
- 聚類(part3)--高階聚類演算法聚類演算法
- 被收費繪圖工具 PUA 了怎麼辦?來看看這個老實工具吧繪圖
- 蟻群演算法(ACO)演算法
- 10月TIOBE榜Java跌出前三!要不我轉回C#吧JavaC#
- 細品 Spring Boot+Thymeleaf,還有這麼多好玩的細節Spring Boot
- Python 這麼熱,運維要不要追趕 Python 的熱潮?Python運維
- OPTICS聚類演算法原理聚類演算法
- 初探DBSCAN聚類演算法聚類演算法
- 聚類演算法綜述聚類演算法
- DBSCAN密度聚類演算法聚類演算法
- BIRCH聚類演算法原理聚類演算法
- 聚類之dbscan演算法聚類演算法
- Meanshift,聚類演算法聚類演算法
- 這樣的閱讀工具,人手一個不過分吧?
- [譯]來試試這個真正的 JavaScript 偵錯程式吧!JavaScript