算法是程序的靈魂,算法能夠告訴開發(fā)者在面對(duì)一個(gè)項(xiàng)目功能時(shí)用什么思路去實(shí)現(xiàn),有了
這個(gè)思路后,編程工作只需遵循這個(gè)思路去實(shí)現(xiàn)即可。本書循序漸進(jìn)、由淺入深地詳細(xì)講解了
算法實(shí)現(xiàn)的核心技術(shù),全書共12章,分別講解了初步認(rèn)識(shí)算法思想,枚舉算法思想,遞歸算法
思想,分治算法思想,貪心算法思想,回溯算法思想,迭代算法思想,查找算法,排序算法,
使用算法解決數(shù)據(jù)結(jié)構(gòu)問題,解決數(shù)學(xué)問題,經(jīng)典算法問題。全書通過具體實(shí)例的實(shí)現(xiàn)過程演
練了各個(gè)知識(shí)點(diǎn)的具體使用流程,引領(lǐng)讀者全面掌握算法的核心技術(shù)。
從你開始學(xué)習(xí)編程的那一刻起,就注定了以后所要走的路:從編程初學(xué)者開始,依次經(jīng)
歷實(shí)習(xí)生、程序員、軟件工程師、架構(gòu)師、CTO 等職位的磨礪。當(dāng)你站在職位頂峰的位置驀
然回首,才會(huì)發(fā)現(xiàn)自己的成功并不是偶然,在程序員的成長(zhǎng)之路上會(huì)有不斷修改代碼、尋找
并解決 Bug、不停測(cè)試程序和修改項(xiàng)目的經(jīng)歷。不可否認(rèn)的是,只要你在自己的開發(fā)生涯中
穩(wěn)扎穩(wěn)打,并且善于總結(jié)和學(xué)習(xí),最終將會(huì)得到可喜的收獲。
■
選擇一本合適的書
對(duì)于一名程序開發(fā)初學(xué)者來說,應(yīng)如何學(xué)習(xí)并提高自己的開發(fā)技術(shù)呢?答案就是買一本
合適的程序開發(fā)書籍進(jìn)行學(xué)習(xí)。但是,市面上許多面向初學(xué)者的編程書籍中大多都是基礎(chǔ)知
識(shí)講解,偏向于理論,讀者讀完以后面對(duì)實(shí)戰(zhàn)項(xiàng)目時(shí)還是無從下手。如何實(shí)現(xiàn)從理論過渡到
項(xiàng)目實(shí)戰(zhàn),是初學(xué)者迫切需要了解的;鑒于此,筆者梳理自己對(duì)算法的理解思路,同時(shí)加入
實(shí)踐項(xiàng)目的經(jīng)驗(yàn),編寫了本書,它將面向具有一定 Python 編程經(jīng)驗(yàn)的初級(jí)程序員,講解了
Python 算法的核心知識(shí)和技巧,這些知識(shí)能夠幫助讀者迅速掌握 Python 算法的精髓,編寫
出更加優(yōu)質(zhì)的代碼。
■
本書的特色
(1)以“入門到精通”的寫作方法構(gòu)建內(nèi)容
為了讓讀者能夠完全看懂書中的內(nèi)容,筆者遵循“入門到精通”基礎(chǔ)類圖書的寫法,循
序漸進(jìn)地講解 Python 開發(fā)語(yǔ)言的基本知識(shí)。
(2)實(shí)例教學(xué),經(jīng)典并深入
以實(shí)例教學(xué)為導(dǎo)向,通過具體實(shí)例講解了各種算法思想的基本知識(shí)和核心用法。通過具
體實(shí)例的講解和剖析,幫助讀者真正掌握 Python 算法的核心內(nèi)容。
(3)視頻講解,二維碼布局全書
書中每一個(gè)二級(jí)目錄下都有一個(gè)二維碼,通過二維碼掃描可以觀看講解視頻,既包括實(shí)
例講解也包括教程講解,對(duì)讀者的開發(fā)水平實(shí)現(xiàn)了拔高處理。
(4)售后答疑幫助讀者快速解決學(xué)習(xí)問題
無論是書中的疑惑,還是在學(xué)習(xí)過程中遇到的問題,筆者將在第一時(shí)間為讀者答疑解惑,
這也是筆者對(duì)讀者的承諾。
I
文前(1).indd 1
2020-8-3 15:00:20
??
Python 常用算法手冊(cè)
(5)QQ 群 + 網(wǎng)站論壇實(shí)現(xiàn)教學(xué)互動(dòng),形成互學(xué)、互幫的朋友圈
為了方便給讀者答疑,筆者提供了網(wǎng)站論壇、QQ 群等技術(shù)支持(通過 QQ:729017304
獲得) 并且隨時(shí)在線與初學(xué)者互動(dòng)。,讓大家在互學(xué)、互幫中形成一個(gè)良好的學(xué)習(xí)編程的氛圍。
■
整體下載包
為了方便不同網(wǎng)絡(luò)環(huán)境的讀者學(xué)習(xí),也為了提升圖書的附加價(jià)值,筆者將書中 108 個(gè)掃
碼視頻和源代碼整理成整體下載包,讀者可以通過封底二維碼和下載鏈接獲取學(xué)習(xí)。
備用網(wǎng)盤下載地址:https://pan.baidu.com/s/1kQH1XkWpYQ3FJMSRcl_CQg
提取碼:mwsg
■
讀者對(duì)象
本書以學(xué)習(xí)筆記的形式系統(tǒng)講解了 Python 語(yǔ)言實(shí)踐中的算法思想,旨在幫助有一定經(jīng)
驗(yàn)的初級(jí)程序員夯實(shí)算法思維基礎(chǔ),并通過大量經(jīng)典演練案例迅速積累經(jīng)驗(yàn),提升編程能力。
■
致謝與批評(píng)
特別感謝中國(guó)鐵道版社有限公司編輯的大力支持,正是各位編輯的求是、耐心和效率,
才使得本書能夠在這么短的時(shí)間內(nèi)出版。另外,也十分感謝我的家人給予的巨大支持。由于
水平有限,書中存在紕漏之處在所難免,懇請(qǐng)讀者提出寶貴的意見或建議,以便修訂并使之
日臻完善。
最后感謝讀者選擇了這本書,更希望它能成為您編程路上的引導(dǎo)者,那么筆者將不勝榮
幸,祝您閱讀快樂!
徐慶豐,西安交通大學(xué)計(jì)算機(jī)碩士,軟件工程碩士。就職于360移動(dòng)端項(xiàng)目組,專門解決移動(dòng)Android設(shè)備方面的數(shù)據(jù)加密、漏洞校驗(yàn)分析和加密工作。精通C、C++、Python、Java,擅長(zhǎng)數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、網(wǎng)絡(luò)攻擊、漏洞查找分析、系統(tǒng)安全架構(gòu)和反編譯。2010年,曾經(jīng)率先發(fā)現(xiàn)微軟IE7的重大漏洞,并提出了具體的補(bǔ)丁方案,引起微軟重視,并建議加入微軟MVP。
第 1 章 初步認(rèn)識(shí)算法思想
1.1 什么是算法 1
1.2 算法是程序的靈魂 3
1.3 算法的表示方法 4
1.4 Python 算法思想 6
第 2 章 枚舉算法思想
2.1 枚舉算法基礎(chǔ) 11
2.2 算法演練——找出符合條件的 5 位數(shù) 12
2.3 算法演練——24 點(diǎn)游戲 .13
2.4 算法演練——解決熄燈問題 .19
2.5 算法演練——解決“討厭的青蛙”問題 .23
第 3 章 遞歸算法思想
3.1 遞歸算法思想基礎(chǔ) 27
3.2 算法演練——解決“斐波那契數(shù)列”問題 .28
3.3 算法演練——解決“漢諾塔”問題 .29
3.4 算法演練——解決“階乘”問題 .32
3.5 算法演練——進(jìn)制轉(zhuǎn)換器 .33
3.6 算法演練——分解數(shù)字 .34
3.7 算法演練——解決二叉樹遍歷問題 .34
3.8 算法演練——最大公約數(shù)和最小公倍數(shù) .38
第 4 章 分治算法思想
4.1 分治算法思想基礎(chǔ) 41
4.2 算法演練——二分法找出有序列表指定值 .43
4.3 算法演練——求順序表中數(shù)據(jù)的最大值 .45
4.4 算法演練——查找列表中元素的最小值和最大值 .46
4.5 算法演練——找出一組序列中的第 k 小(大)的元素 .48
4.6 算法演練——快速排序 .51
4.7 算法演練——實(shí)現(xiàn)歸并排序 .53
4.8 算法演練——整數(shù)劃分 .54
第 5 章 貪心算法思想
5.1 貪心算法思想基礎(chǔ) 57
5.2 算法演練——解決“找零方案”問題 .58
5.3 算法演練——解決“汽車加油”問題 .59
5.4 算法演練——解決“求最大子元素之和問題”問題 .60
5.5 算法演練——解決“幼兒園分糖果”問題 .61
5.6 算法演練——圣誕節(jié)的禮物 .62
5.7 算法演練——解決“活動(dòng)安排”問題 .64
5.8 算法演練——解決“搖擺序列”問題 .67
5.9 算法演練——移除 k 個(gè)數(shù)字 .69
5.10 算法演練——四種解決“霍夫曼編碼”問題的方案 .70
5.11 算法演練——解決“Kruskal 算法”問題 .78
5.12 算法演練——解決“Prim 算法”問題 85
5.13 小結(jié) 89
第 6 章 回溯算法思想
6.1 回溯算法思想基礎(chǔ) 90
6.2 算法演練——破解“解空間” .92
6.3 算法演練——解決“全排列”問題 .95
6.4 算法演練——解決“選排列”問題 .97
6.5 算法演練——解決“最長(zhǎng)公共子序列(LCS)”問題 .99
6.6 算法演練——解決“排課”問題 .101
6.7 算法演練——解決“最佳作業(yè)調(diào)度”問題 .103
6.8 算法演練——解決“圖的遍歷”問題 .106
6.9 算法演練——解決“爬樓梯”問題 .107
6.10 算法演練——解決“m 著色”問題 .109
6.11 算法演練——解決“取物搭配”問題 . 111
6.12 算法演練——解決“旅行商”問題 . 112
6.13 算法演練——解決“野人與傳教士”問題 . 114
6.14 算法演練——解決“騎士巡邏”問題 . 116
6.15 算法演練——解決“八皇后”問題的 4 種方案 . 118
6.16 算法演練——解決“迷宮”問題 .127
第 7 章 迭代算法思想
7.1 迭代算法思想基礎(chǔ) 132
7.2 算法演練——解決“斐波那契數(shù)列”問題 .133
7.3 算法演練——解決“角谷猜想”問題 .134
7.4 算法演練——使用牛頓迭代法計(jì)算方程的根 .135
7.5 算法演練——使用牛頓迭代法求極值 .136
7.6 算法演練——使用牛頓迭代法求平方根 .138
7.7 算法演練——使用牛頓迭代法求極值并繪制曲線 .140
7.8 算法演練——使用牛頓迭代法求解輸入的方程 .142
7.9 算法演練——求方程在 x 附近的一個(gè)實(shí)根 .144
7.10 算法演練——解決“非線程方程組”問題 .144
7.11 算法演練——使用雅克比 (Jacobi) 迭代法求解線性方程組 146
7.12 算法演練——使用 Gauss-Seidel 迭代法求解線性方程組148
第 8 章 查找算法
8.1 查找算法基礎(chǔ) 153
8.2 線性表查找:順序查找 154
8.3 線性表查找:折半查找算法 157
8.4 線性表查找:插值查找算法 161
8.5 線性表查找:分塊查找算法 162
8.6 基于樹的查找法:二叉排序樹算法 167
8.7 基于樹的查找法:平衡二叉排序樹算法 173
8.8 哈希查找算法 182
8.9 斐波那契查找算法 188
8.10 紅黑樹(Red-Black Tree)查找算法 .192
第 9 章 排序算法
9.1 排序基礎(chǔ) 202
9.2 插入排序算法 203
9.3 希爾排序 208
9.4 交換類排序:冒泡排序算法 211
9.5 交換類排序:快速排序算法 215
9.6 選擇排序算法 217
9.7 堆排序算法 222
9.8 歸并排序算法 228
9.9 基數(shù)排序算法 236
9.10 綜合比較各種排序方法 239
第 10 章 使用算法解決數(shù)據(jù)結(jié)構(gòu)問題
10.1 約瑟夫環(huán) 241
10.2 操作順序表 244
10.3 操作鏈表 246
10.4 帶有尾結(jié)點(diǎn)引用的單鏈表 248
10.5使用多叉樹尋找最短路徑 250
10.6樹操作 251
第 11 章 解決數(shù)學(xué)問題
11.1 一段神奇的字符 260
11.21000 以內(nèi)的完全數(shù) .261
11.3多進(jìn)程驗(yàn)證哥德巴赫猜想 263
11.4 親密數(shù) 266
11.5解決自守?cái)?shù)問題 267
11.6矩陣運(yùn)算 267
11.7一元多項(xiàng)式運(yùn)算 269
11.8素?cái)?shù)問題 271
第 12 章 經(jīng)典算法問題
12.1借書方案 279
12.2捕魚和分魚 280
12.3出售金魚 281
12.4平分七筐魚 282
12.5五家共井問題 283
12.6三色球問題 284
12.7計(jì)算年齡 285
12.8常勝將軍問題 287
12.9三色旗問題 288