-
>
決戰(zhàn)行測5000題(言語理解與表達)
-
>
軟件性能測試.分析與調(diào)優(yōu)實踐之路
-
>
第一行代碼Android
-
>
深度學習
-
>
Unreal Engine 4藍圖完全學習教程
-
>
深入理解計算機系統(tǒng)-原書第3版
-
>
Word/Excel PPT 2013辦公應用從入門到精通-(附贈1DVD.含語音視頻教學+辦公模板+PDF電子書)
漫畫算法:小灰的算法之旅 版權(quán)信息
- ISBN:9787121361975
- 條形碼:9787121361975 ; 978-7-121-36197-5
- 裝幀:簡裝本
- 冊數(shù):暫無
- 重量:暫無
- 所屬分類:>
漫畫算法:小灰的算法之旅 本書特色
本書通過主人公小灰的心路歷程,用漫畫的形式講述了算法和數(shù)據(jù)結(jié)構(gòu)的基礎知識,復雜多變的算法面試題目及算法的實際應用場景。首先介紹了算法和數(shù)據(jù)結(jié)構(gòu)的總體概念,告訴大家算法是什么,數(shù)據(jù)結(jié)構(gòu)又是什么,都有哪些用途,如何分析時間復雜度,如何分析空間復雜度。第二章 介紹了*基本的數(shù)據(jù)結(jié)構(gòu),包括數(shù)組、鏈表、棧、隊列、哈希表的概念和讀寫操作。第三章 介紹了樹和二叉樹的概念、二叉樹的各種遍歷方式、二叉樹的特殊形式二叉堆和優(yōu)先隊列的應用。第四章 介紹了幾種典型的排序算法,包括冒泡排序、快速排序、堆排序、計數(shù)排序、桶排序。第五章 介紹了十余種職場上流行的算法面試題目及詳細的解題思路。例如怎樣判斷鏈表有環(huán)、怎樣計算大整數(shù)加法等。第六章 介紹了算法在職場上的一些應用,例如使用LRU算法來淘汰冷數(shù)據(jù),使用Bitmap算法來統(tǒng)計用戶特征等。
漫畫算法:小灰的算法之旅 內(nèi)容簡介
本書通過主人公小灰的心路歷程,用漫畫的形式講述了算法和數(shù)據(jù)結(jié)構(gòu)的基礎知識,復雜多變的算法面試題目及算法的實際應用場景。首先介紹了算法和數(shù)據(jù)結(jié)構(gòu)的總體概念,告訴大家算法是什么,數(shù)據(jù)結(jié)構(gòu)又是什么,都有哪些用途,如何分析時間復雜度,如何分析空間復雜度。第二章 介紹了很基本的數(shù)據(jù)結(jié)構(gòu),包括數(shù)組、鏈表、棧、隊列、哈希表的概念和讀寫操作。第三章 介紹了樹和二叉樹的概念、二叉樹的各種遍歷方式、二叉樹的特殊形式二叉堆和優(yōu)先隊列的應用。第四章 介紹了幾種典型的排序算法,包括冒泡排序、快速排序、堆排序、計數(shù)排序、桶排序。第五章 介紹了十余種職場上流行的算法面試題目及詳細的解題思路。例如怎樣判斷鏈表有環(huán)、怎樣計算大整數(shù)加法等。第六章 介紹了算法在職場上的一些應用,例如使用LRU算法來淘汰冷數(shù)據(jù),使用Bitmap算法來統(tǒng)計用戶特征等。
漫畫算法:小灰的算法之旅漫畫算法:小灰的算法之旅 前言
推薦序
初識小灰是因為在他的微信公眾號看到一篇講動態(tài)規(guī)劃的文章,當時覺得挺意外,沒想到還能有人用漫畫來解釋動態(tài)規(guī)劃算法。
所謂算法,其實是個很寬泛的概念。有理解起來難度超大,燒腦到要“爆炸”的;也有簡單直接,一目了然的;更多的卻是,雖然看起來復雜,但只要方法得當,搞清原理,掌握起來還是很容易的那種算法。
可是很多人被“算法”二字“猙獰”的外表嚇住了,久久不敢接觸它。好不容易斗膽翻翻算法書,結(jié)果看到的不是大篇大篇的代碼,就是亂七八糟的符號。這都是什么呀?!算了,看來是學不會算法了,放棄吧……
但凡書籍文章,*難讀的,肯定是公式符號;而*好讀的,無外乎圖像、對話等。本書作者以可愛的小灰和大黃兩個漫畫形象為主人公,把對算法的描述過程嵌入到它們的對話之中,并輔之以圖形等直觀方式來表達數(shù)據(jù)結(jié)構(gòu)和操作步驟——這種表達形式帶著天然的親和力,完全沒有計算機背景的讀者讀來也不覺得生硬。
小灰所做的事情,就是給算法這顆“炮彈”包上了“糖衣”,讓算法的威力潛藏于內(nèi),外表不再嚇人,反而變得萌萌噠,Q彈可愛,清新怡人。
先干為敬,讓我們一起吞了這顆包著“炸藥”的“糖丸”吧!
——李燁,微軟高級軟件工程師
許多程序員對算法望而生畏,認為算法是一門高深莫測的學問。
以前我曾經(jīng)面試過一個求職者,起初考查他的技術功底和項目經(jīng)驗,他都回答得不錯。接下來我對他說:“OK,那我考查一下你的算法水平吧。”
題目還沒說出口,該求職者立馬擺擺手說:“不要不要,我算法不行的!”
我還是有些不甘心,接著說道:“我只考查*基礎的,你說說冒泡排序的基本思路吧!”
他仍舊說:“我不知道,我算法一點都不會……”
算法真的那么難,真的那么無趣嗎?
恰恰相反,算法是編程領域中*有意思的一塊內(nèi)容,也不像許多人想象的那樣難以駕馭。
許多人把算法比作程序員的“內(nèi)功”,但筆者覺得這個比喻并不是很恰當。內(nèi)功實實在在,沒有任何巧妙可言,而算法天馬行空,千變?nèi)f化,就像金庸筆下令狐沖的一套獨孤九劍。
學習算法,我們不需要死記硬背那些冗長復雜的背景知識、底層原理、指令語法……需要做的是領悟算法思想、理解算法對內(nèi)存空間和性能的影響,以及開動腦筋去尋求解決問題的*佳方案。相比編程領域的其他技術,算法更純粹,更接近數(shù)學,也更具有趣味性。
我一直希望寫出一些東西,讓更多的IT同行能夠領略到算法的魅力,可是用什么方式來寫呢?
2016年9月,一次突如其來的靈感讓我創(chuàng)造了一個初出茅廬的菜鳥程序員形象,這個菜鳥程序員名叫小灰。
程序員小灰的故事活躍在同名的微信公眾號上,該公眾號用漫畫的形式訴說著小灰一次又一次的面試經(jīng)歷,倔強的小灰屢戰(zhàn)屢敗,屢敗屢戰(zhàn)。小灰是我剛剛?cè)胄袝r的真實寫照,相信許多程序員也能從中看到自己的影子。
終于,在朋友們的支持和鼓勵下,程序員小灰的故事從微信公眾號搬到了紙質(zhì)圖書上。能讓更多同行看到小灰的故事,我感到十分欣慰。
本書特色
這本書通過漫畫的形式,講述了小灰學習算法和數(shù)據(jù)結(jié)構(gòu)知識的心路歷程。書中許多內(nèi)容源于本人的微信公眾號,但是比公眾號上所展現(xiàn)的內(nèi)容更加系統(tǒng)、全面,也更加嚴謹。
本書的前4章是對算法基礎知識的講解,沒有算法和數(shù)據(jù)結(jié)構(gòu)基礎的讀者可以從頭開始進行系統(tǒng)學習。
前 言
對于有一定基礎的讀者,也可以選擇從第5章面試題的講解開始閱讀,每一道面試題目都是相對獨立的,并不需要嚴格地按順序?qū)W習。同時,也推薦大家適當看看前面的內(nèi)容,鞏固一下自己的算法知識體系。
這不是一本編程入門書。在編程方面完全零基礎的讀者,建議至少先了解一門編程語言。
這也不是一本局限于某個編程語言的書,雖然書中的代碼示例都是用Java來實現(xiàn)的,但算法思想是相通的。在實現(xiàn)代碼時,書中盡可能規(guī)避了Java語言的特殊語法和工具類,相信熟悉其他語言的開發(fā)者也不難看懂。
勘誤和支持
除書中所提供的代碼示例以外,大家也可以關注微信公眾號“程序員小灰”,在后臺回復“漫畫算法”,獲得全書完整的、可運行的代碼。為了保證代碼的簡潔,在部分代碼實現(xiàn)中省略了煩瑣的參數(shù)判空和驗證邏輯。由于作者水平有限,書中難免會出現(xiàn)一些錯誤,懇請廣大讀者批評指正。
讀者如果在閱讀過程中產(chǎn)生疑問或發(fā)現(xiàn)Bug,歡迎隨時到微信公眾號的后臺留言。
“程序員小灰”微信公眾號二維碼如下。
致謝
感謝微信公眾號“程序員小灰”的讀者。你們的鼓勵和支持,給了我堅持創(chuàng)作的動力。感謝成都道然科技有限責任公司的姚新軍老師。有了他的肯定、支持和指導意見,才有了這本書的正式出版。
感謝樸提、單耳和康慧三位插畫師所畫的精彩插畫,是你們讓小灰的形象更豐滿、更可愛。感謝為本書審稿的楊道談先生,感謝為本書寫序的李燁老師,感謝在百忙之中閱讀書稿并寫書評的專家們,他們是劉欣、張洪亮、安曉輝、李艷鵬、翟永超等。
特別感謝我的父母,是他們把我?guī)нM了數(shù)學的大門。在我上小學的時候,是他們的堅持,才讓我有機會學習奧數(shù),參加數(shù)學競賽,并對數(shù)學和邏輯產(chǎn)生了興趣。在這本書的寫作過程中,又是他們辛苦努力屏蔽生活瑣事對我的干擾,讓我能夠全身心地投入到本書的寫作當中。
謹以此書獻給我的家人,我的讀者,以及熱愛編程的朋友們!
——魏夢舒,微信公眾號“程序號小灰”的作者
漫畫算法:小灰的算法之旅 目錄
1.1 算法和數(shù)據(jù)結(jié)構(gòu) / 1
1.1.1 小灰和大黃 / 1
1.1.2 什么是算法 / 3
1.1.3 什么是數(shù)據(jù)結(jié)構(gòu) / 7
1.2 時間復雜度 / 8
1.2.1 算法的好與壞 / 8
1.2.2 基本操作執(zhí)行次數(shù) / 10
1.2.3 漸進時間復雜度 / 12
1.2.4 時間復雜度的巨大差異 / 15
1.3 空間復雜度 / 16
1.3.1 什么是空間復雜度 / 16
1.3.2 空間復雜度的計算 / 19
1.3.3 時間與空間的取舍 / 21
1.4 小結(jié) / 22
第2章 數(shù)據(jù)結(jié)構(gòu)基礎 / 23
2.1 什么是數(shù)組 / 23
2.1.1 初識數(shù)組 / 23
2.1.2 數(shù)組的基本操作 / 26
2.1.3 數(shù)組的優(yōu)勢和劣勢 / 32
2.2 什么是鏈表 / 33
2.2.1 “正規(guī)軍”和“地下黨” / 33
2.2.2 鏈表的基本操作 / 35
2.3 棧和隊列 / 42
2.3.1 物理結(jié)構(gòu)和邏輯結(jié)構(gòu) / 42
2.3.2 什么是!/ 43
2.3.3 棧的基本操作 / 44
2.3.4 什么是隊列 / 45
2.3.5 隊列的基本操作 / 46
2.3.6 棧和隊列的應用 / 50
2.4 神奇的散列表 / 51
2.4.1 為什么需要散列表 / 51
2.4.2 哈希函數(shù) / 54
2.4.3 散列表的讀寫操作 / 55
2.5 小結(jié) / 59
第3章 樹 / 61
3.1 樹和二叉樹 / 61
3.1.1 什么是樹 / 61
3.1.2 什么是二叉樹 / 64
3.1.3 二叉樹的應用 / 67
3.2 二叉樹的遍歷 / 71
3.2.1 為什么要研究遍歷 / 71
3.2.2 深度優(yōu)先遍歷 / 73
3.2.3 廣度優(yōu)先遍歷 / 84
3.3 什么是二叉堆 / 88
3.3.1 初識二叉堆 / 88
3.3.2 二叉堆的自我調(diào)整 / 90
3.3.3 二叉堆的代碼實現(xiàn) / 95
3.4 什么是優(yōu)先隊列 / 98
3.4.1 優(yōu)先隊列的特點 / 98
3.4.2 優(yōu)先隊列的實現(xiàn) / 99
3.5 小結(jié) / 103
第4章 排序算法 / 105
4.1 引言 / 105
4.2 什么是冒泡排序 / 107
4.2.1 初識冒泡排序 / 107
4.2.2 冒泡排序的優(yōu)化 / 110
4.2.3 雞尾酒排序 / 114
4.3 什么是快速排序 / 118
4.3.1 初識快速排序 / 118
4.3.2 基準元素的選擇 / 120
4.3.3 元素的交換 / 122
4.3.4 單邊循環(huán)法 / 125
4.3.5 非遞歸實現(xiàn) / 128
4.4 什么是堆排序 / 131
4.4.1 傳說中的堆排序 / 131
4.4.2 堆排序的代碼實現(xiàn) / 134
4.5 計數(shù)排序和桶排序 / 137
4.5.1 線性時間的排序 / 137
4.5.2 初識計數(shù)排序 / 138
4.5.3 計數(shù)排序的優(yōu)化 / 140
4.5.4 什么是桶排序 / 145
4.6 小結(jié) / 149
第5章 面試中的算法 / 150
5.1 躊躇滿志的小灰 / 150
5.2 如何判斷鏈表有環(huán) / 151
5.2.1 一場與鏈表相關的面試 / 151
5.2.2 解題思路 / 155
5.2.3 問題擴展 / 158
5.3 *小棧的實現(xiàn) / 161
5.3.1 一場關于棧的面試 / 161
5.3.2 解題思路 / 163
5.4 如何求出*大公約數(shù) / 166
5.4.1 一場求*大公約數(shù)的面試 / 166
5.4.2 解題思路 / 168
5.5 如何判斷一個數(shù)是否為2的整數(shù)次冪 / 173
5.5.1 一場很“2”的面試 / 173
5.5.2 解題思路 / 175
5.6 無序數(shù)組排序后的*大相鄰差 / 178
5.6.1 一道奇葩的面試題 / 178
5.6.2 解題思路 / 179
5.7 如何用棧實現(xiàn)隊列 / 184
5.7.1 又是一道關于棧的面試題 / 184
5.7.2 解題思路 / 186
5.8 尋找全排列的下一個數(shù) / 191
5.8.1 一道關于數(shù)字的題目 / 191
5.8.2 解題思路 / 193
5.9 刪去k個數(shù)字后的*小值 / 196
5.9.1 又是一道關于數(shù)字的題目 / 196
5.9.2 解題思路 / 198
5.10 如何實現(xiàn)大整數(shù)相加 / 205
5.10.1 加法,你會不會 / 205
5.10.2 解題思路 / 206
5.11 如何求解金礦問題 / 211
5.11.1 一個關于財富自由的問題 / 211
5.11.2 解題思路 / 213
5.12 尋找缺失的整數(shù) / 223
5.12.1 “五行”缺一個整數(shù) / 223
5.12.2 問題擴展 / 225
第6章 算法的實際應用 / 230
6.1 小灰上班的第1天 / 230
6.2 Bitmap的巧用 / 232
6.2.1 一個關于用戶標簽的需求 / 232
6.2.2 用算法解決問題 / 234
6.3 LRU算法的應用 / 241
6.3.1 一個關于用戶信息的需求 / 241
6.3.2 用算法解決問題 / 243
6.4 什么是A星尋路算法 / 249
6.4.1 一個關于迷宮尋路的需求 / 249
6.4.2 用算法解決問題 / 251
6.5 如何實現(xiàn)紅包算法 / 262
6.5.1 一個關于錢的需求 / 262
6.5.2 用算法解決問題 / 264
6.6 算法之路無止境 / 268
漫畫算法:小灰的算法之旅 節(jié)選
推薦序
初識小灰是因為在他的微信公眾號看到一篇講動態(tài)規(guī)劃的文章,當時覺得挺意外,沒想到還能有人用漫畫來解釋動態(tài)規(guī)劃算法。
所謂算法,其實是個很寬泛的概念。有理解起來難度超大,燒腦到要“爆炸”的;也有簡單直接,一目了然的;更多的卻是,雖然看起來復雜,但只要方法得當,搞清原理,掌握起來還是很容易的那種算法。
可是很多人被“算法”二字“猙獰”的外表嚇住了,久久不敢接觸它。好不容易斗膽翻翻算法書,結(jié)果看到的不是大篇大篇的代碼,就是亂七八糟的符號。這都是什么呀?!算了,看來是學不會算法了,放棄吧……
但凡書籍文章,*難讀的,肯定是公式符號;而*好讀的,無外乎圖像、對話等。本書作者以可愛的小灰和大黃兩個漫畫形象為主人公,把對算法的描述過程嵌入到它們的對話之中,并輔之以圖形等直觀方式來表達數(shù)據(jù)結(jié)構(gòu)和操作步驟——這種表達形式帶著天然的親和力,完全沒有計算機背景的讀者讀來也不覺得生硬。
小灰所做的事情,就是給算法這顆“炮彈”包上了“糖衣”,讓算法的威力潛藏于內(nèi),外表不再嚇人,反而變得萌萌噠,Q彈可愛,清新怡人。
先干為敬,讓我們一起吞了這顆包著“炸藥”的“糖丸”吧!
李燁,微軟高級軟件工程師
漫畫算法:小灰的算法之旅 相關資料
用漫畫形式講解算法的文章不少,為什么看小灰的漫畫就能夠輕松地把數(shù)據(jù)結(jié)構(gòu)和算法給掌握了呢?因為漫畫只是個形式而已,關鍵點還是講解一個問題的思路,如何一步步地引導讀者去思考,由淺入深,在這方面小灰的書做得很好,強烈推薦大家閱讀。
——劉欣,《碼農(nóng)翻身》作者
小灰所做的事情,就是給算法這顆炮彈包上了糖衣,讓算法的威力潛藏于內(nèi),外表不再嚇人反而萌萌噠,Q彈可愛,清新怡人。先干為敬,讓我們一起吞了這顆包著炸藥的糖丸!
——李燁,微軟高級軟件工程師
算法知識,毋庸置疑是極其重要的。但是同時他也是很枯燥乏味的,尤其是很多算法類的書籍看起來更是味同嚼蠟。但是本書形式新穎,通過漫畫的形式,由淺入深的講解各類常用算法。從基本數(shù)據(jù)結(jié)構(gòu),到各類排序算法,再到面試算法,最后又涉及到職場應用,覆蓋面很全,非常值得廣大程序員們閱讀。
——張洪亮,公眾號『Hollis』作者
小灰這本《漫畫算法》,用輕松的漫畫形式和通俗有趣的生活化解讀,有效降低了學習算法的門檻,可以順利引領我們進入算法殿堂,強烈推薦想學算法卻因其枯燥復雜而望之生畏的朋友們一看。
——安曉輝,《程序員的成長課》作者,公眾號『程序視界』主理人
小灰是個做事非常認真的同學,每次寫文章都要深思熟慮的為讀者著想,對每一個細節(jié)把控的都十分的嚴謹,小灰的漫畫功底更是了得,《漫畫算法》一書讓我眼前一亮,沒有枯燥的理論和算法,全書以生動有趣的漫畫解析算法執(zhí)行全過程,達到了娛樂既學習的目的,以直觀、易懂的方式展現(xiàn)了通用數(shù)據(jù)結(jié)構(gòu)和基礎算法的魅力,是每一位技術工作者不可不讀的一門好書。
——李艷鵬,《可伸縮服務架構(gòu):框架與中間件》等書作者
算法是我們每一位互聯(lián)網(wǎng)技術人都逃不開的話題,但是其枯燥乏味的本質(zhì)讓很多初學者望而卻步。對此,我推薦小灰的這本《漫畫算法》給大家,本書一改傳統(tǒng)教材的描述風格,以風趣幽默的漫畫形式,帶領我們走進魅力無限的算法世界,領略算法賦予的高效與神奇之處。
——翟永超,公眾號『程序猿DD』作者、《Spring Cloud微服務實戰(zhàn)》作者
漫畫算法:小灰的算法之旅 作者簡介
微信公眾號程序員小灰的作者,多年的軟件行業(yè)從業(yè)經(jīng)驗,先后在京東金融和摩拜科技從事算法和研發(fā)相關工作,對算法有著深入的研究。
- >
羅曼·羅蘭讀書隨筆-精裝
- >
【精裝繪本】畫給孩子的中國神話
- >
李白與唐代文化
- >
月亮虎
- >
史學評論
- >
月亮與六便士
- >
人文閱讀與收藏·良友文學叢書:一天的工作
- >
二體千字文