《算法設(shè)計與應(yīng)用》深入淺出、全面系統(tǒng)地介紹了常用算法設(shè)計與應(yīng)用技術(shù),內(nèi)容包括算法設(shè)計的策略、排序與查找算法、樹模型算法、圖模型算法、網(wǎng)絡(luò)流模型算法、組合優(yōu)化算法、深度學(xué)習(xí)算法、若干重要的專用算法等。《算法設(shè)計與應(yīng)用》將算法的經(jīng)典內(nèi)容、前沿內(nèi)容以及相關(guān)的應(yīng)用技術(shù)進(jìn)行整合,形成一套完整、統(tǒng)一的體系結(jié)構(gòu),使得讀者在學(xué)習(xí)算法理論知識的同時,還能系統(tǒng)地掌握算法在應(yīng)用方面的知識,為后續(xù)學(xué)習(xí)打下扎實(shí)的算法設(shè)計與應(yīng)用基礎(chǔ)。《算法設(shè)計與應(yīng)用》各章自成體系,可分別作為獨(dú)立單元進(jìn)行選擇學(xué)習(xí),以滿足讀者的差異化需求。每章均配有一定數(shù)量的習(xí)題,供讀者練習(xí)。
《算法設(shè)計與應(yīng)用》內(nèi)容豐富、思路清晰、實(shí)例講解詳細(xì)、圖例直觀形象,適合作為計算機(jī)及相關(guān)專業(yè)的本科生教材,也可供工程技術(shù)人員和自學(xué)讀者學(xué)習(xí)參考。
在每個章節(jié)穿插豐富的應(yīng)用實(shí)例來驗(yàn)證算法的正確性、有效性和實(shí)用性,而且介紹和討論了若干專用算法的設(shè)計技術(shù)。
盡可能用樸實(shí)的語言深入淺出地介紹算法設(shè)計技術(shù),著重突出算法設(shè)計的思想和本質(zhì),而不僅僅是數(shù)學(xué)上的形式化描述。
前 言計算機(jī)已融入人們的生活,改變?nèi)藗兊纳罘绞剑讶藗儙нM(jìn)了如今的信息時代和互聯(lián)網(wǎng)時代。很多年輕人通過掌握計算機(jī)核心技術(shù)而改善了自己的生活,甚至改變了自己的命運(yùn),實(shí)現(xiàn)了人生的輝煌。因此,學(xué)好計算機(jī)、成為高水平計算機(jī)專業(yè)人才是眾多有志青年夢寐以求的目標(biāo)。然而,計算機(jī)知識浩瀚無邊,無數(shù)事實(shí)表明:對于初學(xué)者來說,如果在學(xué)習(xí)的開始階段不能抓住一些關(guān)鍵核心知識進(jìn)行重點(diǎn)學(xué)習(xí),那么很快就會被計算機(jī)知識的海洋湮沒而一事無成。
那么作為一個計算機(jī)初學(xué)者,首先需要重點(diǎn)學(xué)習(xí)的核心知識是什么?事實(shí)上,高水平的計算機(jī)專業(yè)人員多是通過編寫程序的方式進(jìn)行研發(fā)工作的。因此,要想學(xué)好計算機(jī),首先必須學(xué)好編程知識,能夠?qū)懗龈咚降某绦颉D敲词裁唇谐绦颍砍鯇W(xué)者又該如何學(xué)習(xí)才能成為真正的編程高手?著名的瑞士計算機(jī)科學(xué)家、圖靈獎獲得者尼克勞斯?沃爾斯(N. Wirth)教授給出如下著名的程序定義公式并被廣大計算機(jī)業(yè)內(nèi)人士認(rèn)可:
程序=數(shù)據(jù)結(jié)構(gòu)+算法從本質(zhì)上說,計算機(jī)是一種信息處理工具,處理對象是五花八門的各類數(shù)據(jù),必須采用合理的方式或結(jié)構(gòu)來存放這些數(shù)據(jù),以便能夠進(jìn)行方便快速的存取。這就是數(shù)據(jù)結(jié)構(gòu)要解決的問題,也是優(yōu)秀程序員必須掌握的基本知識。
算法則是問題求解的計算思路或步驟。計算機(jī)畢竟只是一部機(jī)器,它不能直接面對和解決現(xiàn)實(shí)問題,而需要人類將現(xiàn)實(shí)問題抽象成一定的數(shù)學(xué)模型,再通過一定的算法對數(shù)學(xué)模型進(jìn)行求解。因此,算法是分析問題、解決問題的核心內(nèi)容,是程序的靈魂。算法設(shè)計技術(shù)是程序員安身立命的根本,也是計算機(jī)科學(xué)與技術(shù)學(xué)科的重要基石。
因此,要學(xué)好計算機(jī),首先必須學(xué)好數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計知識。
算法設(shè)計是一種思維的藝術(shù),需要一定的抽象思維能力和數(shù)學(xué)知識。這為廣大初學(xué)者學(xué)習(xí)和掌握算法設(shè)計知識帶來一定的困難,使得算法設(shè)計技術(shù)一直難以得到普及,在一定程度上阻隔了眾多計算機(jī)學(xué)子的夢想。因此,多年來筆者一直很想編寫一本適合的算法設(shè)計教材來解決這個問題,以滿足廣大讀者學(xué)習(xí)和掌握算法設(shè)計技術(shù)的需要。
為使本書達(dá)到上述目的,筆者著重考慮如下兩個要點(diǎn):
第一、突出應(yīng)用。一項(xiàng)技術(shù)有了具體的應(yīng)用,大家自然會感興趣,興趣是最好的老師和學(xué)習(xí)動力。因此,本書采用比較獨(dú)特的編寫方式,不僅在每個章節(jié)穿插豐富的應(yīng)用實(shí)例來驗(yàn)證算法的正確性、有效性和實(shí)用性,而且介紹和討論了若干專用算法的設(shè)計技術(shù),使得讀者在學(xué)習(xí)算法設(shè)計理論知識的同時,還能夠系統(tǒng)地掌握算法應(yīng)用方面的知識。
第二、強(qiáng)調(diào)可讀性。本書站在本科生低年級的思維角度進(jìn)行編寫,在保證表達(dá)準(zhǔn)確的前提下,盡可能用最樸實(shí)的語言深入淺出地介紹算法設(shè)計技術(shù),著重突出算法設(shè)計的思想和本質(zhì),而不僅僅是數(shù)學(xué)上的形式化描述。同時,本書輔以生動的圖形解釋,使讀者能夠?qū)λ惴ㄓ懈忧逦⑷娴睦斫狻P枰f明的是,本書并沒有為了增加可讀性而降低知識的深度,只是通過比較恰當(dāng)?shù)姆绞桨严嚓P(guān)知識表達(dá)得更加清楚明白,使得廣大讀者通過自己的努力就可以不太困難地掌握算法設(shè)計與應(yīng)用的核心技術(shù)。
本書內(nèi)容主要包括算法設(shè)計的策略、排序與查找算法、樹模型算法、圖模型算法、網(wǎng)絡(luò)流模型算法、組合優(yōu)化算法、若干專用算法的設(shè)計與應(yīng)用,全面、系統(tǒng)地介紹了計算機(jī)算法設(shè)計的基本理論與應(yīng)用知識。本書力圖將算法的經(jīng)典內(nèi)容與前沿內(nèi)容有機(jī)地結(jié)合在一起,形成一套完整、統(tǒng)一的體系結(jié)構(gòu),既有算法設(shè)計策略的總結(jié),又有具體算法專題的論述,既有計算理論上的深度剖析,又有專門的算法實(shí)用性的討論,使得廣大讀者在獲取算法設(shè)計理論知識的同時,能比較系統(tǒng)地掌握算法應(yīng)用方面的知識,為今后的工作和進(jìn)一步學(xué)習(xí)打下扎實(shí)的算法設(shè)計與應(yīng)用基礎(chǔ)。
本書首先在第1章介紹算法設(shè)計的基礎(chǔ)知識,包括算法的概念、表示和效率分析方法,然后從算法設(shè)計策略出發(fā),在第2章詳細(xì)介紹了算法設(shè)計的基本策略,包括蠻力與貪心策略、遞歸與分治策略、回溯與分支限界策略、動態(tài)規(guī)劃策略等,并結(jié)合實(shí)例分析相關(guān)策略的應(yīng)用場合,使得讀者能夠從宏觀上了解和掌握算法設(shè)計的核心思想。隨后,在此基礎(chǔ)上用連續(xù)5章的篇幅詳細(xì)分析和討論了若干基本算法,即排序算法、樹模型算法、圖模型算法、網(wǎng)絡(luò)流算法和查找算法,這5章是算法設(shè)計的核心知識,讀者應(yīng)熟練掌握。本書在隨后的第8章介紹了組合優(yōu)化及智能算法的設(shè)計技術(shù),包括組合優(yōu)化的基本算法和啟發(fā)式算法、深度學(xué)習(xí)模型及算法。這部分內(nèi)容已接近或到達(dá)算法學(xué)術(shù)研究前沿,可為讀者進(jìn)一步學(xué)習(xí)深造和研發(fā)高水平智能程序提供良好的基礎(chǔ)。最后,本書在第9章詳細(xì)介紹了若干重要專用算法的設(shè)計技術(shù),包括數(shù)據(jù)壓縮算法、數(shù)據(jù)加密算法以及字符串匹配算法,使讀者能通過學(xué)習(xí)和使用這些專用算法較好地解決實(shí)際問題。
本書讀者對象為計算機(jī)科學(xué)與技術(shù)專業(yè)、軟件工程專業(yè)、信息安全專業(yè)、物聯(lián)網(wǎng)專業(yè)、電子信息工程專業(yè)、自動化專業(yè)、信息與計算科學(xué)專業(yè)的本科生和低年級研究生,以及相關(guān)專業(yè)的廣大科技工作者。考慮到算法內(nèi)容浩瀚、種類繁多,掌握全部內(nèi)容需要大量的時間,為方便廣大讀者進(jìn)行差異化學(xué)習(xí),筆
出版說明
前言
第1章 算法設(shè)計的基礎(chǔ)知識
1.1 計算機(jī)與算法
1.1.1 計算機(jī)問題求解
1.1.2 算法的概念
1.1.3 算法的常用表示方法
1.2 算法的效率分析
1.2.1 算法效率的度量
1.2.2 函數(shù)增長的階
1.2.3 計算復(fù)雜度的估算
1.3 習(xí)題
第2章 算法設(shè)計的基本策略
2.1 蠻力與貪心
2.1.1 蠻力法
2.1.2 貪心法
2.1.3 應(yīng)用實(shí)例
2.2 遞歸與分治
2.2.1 遞歸法
2.2.2 分治法
2.2.3 應(yīng)用實(shí)例
2.3 回溯與分支限界
2.3.1 回溯法
2.3.2 分支限界法
2.3.3 應(yīng)用實(shí)例
2.4 動態(tài)規(guī)劃
2.4.1 算法原理
2.4.2 應(yīng)用實(shí)例
2.5 習(xí)題
第3章 排序算法設(shè)計與分析
3.1 基本排序算法
3.1.1 冒泡排序
3.1.2 插入排序
3.1.3 選擇排序
3.2 進(jìn)階排序算法
3.2.1 歸并排序
3.2.2 堆排序
3.2.3 快速排序
3.2.4 希爾排序
3.3 線性時間排序算法
3.3.1 計數(shù)排序
3.3.2 桶排序
3.3.3 基數(shù)排序
3.4 排序算法的應(yīng)用
3.4.1 排序歸約問題
3.4.2 合并果子問題
3.4.3 最優(yōu)樹的構(gòu)造問題
3.5 習(xí)題
第4章 樹模型及其算法設(shè)計
4.1 樹的基本模型
4.1.1 樹與二叉樹
4.1.2 平衡樹及其操作
4.1.3 紅黑樹及其操作
4.2 樹的進(jìn)階模型
4.2.1 鍵樹及其操作
4.2.2 B樹及其操作
4.2.3 二項(xiàng)樹及其操作
4.3 樹模型的基本算法
4.3.1 樹的遞歸遍歷算法
4.3.2 樹的非遞歸遍歷算法
4.3.3 森林與樹的轉(zhuǎn)換
4.4 樹模型的應(yīng)用
4.4.1 找假幣問題
4.4.2 串查找與排序問題
4.4.3 輪流摸牌問題
4.4.4 霍夫曼編碼問題
4.5 習(xí)題
第5章 圖模型及其算法設(shè)計
5.1 圖模型的基礎(chǔ)知識
5.1.1 圖的基本概念
5.1.2 圖的表示與存儲
5.1.3 圖的結(jié)構(gòu)與性質(zhì)
5.2 圖模型的基本算法
5.2.1 圖的遍歷
5.2.2 最小生成樹
5.2.3 最短路徑
5.3 特殊圖模型與算法
5.3.1 歐拉圖及其應(yīng)用
5.3.2 哈密頓圖及其應(yīng)用
5.3.3 偶圖及其應(yīng)用
5.3.4 平面圖及其應(yīng)用
5.4 圖模型的應(yīng)用
5.4.1 公共汽車通票問題
5.4.2 重型運(yùn)輸問題
5.4.3 中國郵路問題
5.4.4 關(guān)鍵路徑問題
5.5 習(xí)題
第6章 網(wǎng)絡(luò)流模型及其算法設(shè)計
6.1 最大網(wǎng)絡(luò)流問題
6.1.1 網(wǎng)絡(luò)與流的基本概念
6.1.2 Ford-Fulkerson 算法
6.1.3 EK算法與Dinic算法
6.1.4 預(yù)流推進(jìn)算法
6.2 最小費(fèi)用流問題
6.2.1 最小費(fèi)用流
6.2.2 消圈算法
6.2.3 最小費(fèi)用路徑算法
6.3 二分匹配問題
6.3.1 網(wǎng)絡(luò)流解法
6.3.2 匈牙利算法
6.3.3 最佳匹配問題
6.4 網(wǎng)絡(luò)流算法的應(yīng)用
6.4.1 列車調(diào)度問題
6.4.2 毛巾供應(yīng)問題
6.4.3 植物大戰(zhàn)僵尸問題
6.4.4 穩(wěn)定婚配問題
6.5 習(xí)題
第7章 查找算法設(shè)計與分析
7.1 靜態(tài)表查找算法
7.1.1 順序表查找
7.1.2 有序表查找
7.1.3 靜態(tài)樹表查找
7.1.4 索引順序表查找
7.2 散列表查找算法
7.2.1 散列表的基本概念
7.2.2 散列函數(shù)的構(gòu)造
7.2.3 常用的Hash沖突處理方法
7.2.4 散列表的查找及分析
7.3 搜索樹查找算法
7.3.1 廣度優(yōu)先查找
7.3.2 深度優(yōu)先查找
7.3.3 最佳優(yōu)先查找
7.4 特殊樹查找算法
7.4.1 二叉查找樹查找算法
7.4.2 紅黑樹查找算法
7.4.3 鍵樹查找算法
7.4.4 B樹查找算法
7.5 查找算法的應(yīng)用
7.5.1 運(yùn)動員最佳配對問題
7.5.2 拼寫檢查器問題
7.5.3 八數(shù)碼問題
7.5.4 騎士游歷問題
7.6 習(xí)題
第8章 組合優(yōu)化算法設(shè)計與分析
8.1 基本組合優(yōu)化算法
8.1.1 線性規(guī)劃算法
8.1.2 梯度法與共軛梯度法
8.1.3 牛頓法與擬牛頓法
8.2 啟發(fā)式組合優(yōu)化算法
8.2.1 禁忌搜索算法
8.2.2 模擬退火算法
8.2.3 遺傳算法
8.3 深度學(xué)習(xí)模型與算法
8.3.1 淺層學(xué)習(xí)與深度學(xué)習(xí)
8.3.2 深度學(xué)習(xí)的系統(tǒng)架構(gòu)
8.3.3 DBN模型及其學(xué)習(xí)算法
8.3.4 CNN模型及其學(xué)習(xí)算法
8.4 組合優(yōu)化算法應(yīng)用
8.4.1 頂點(diǎn)覆蓋問題
8.4.2 最佳裝箱問題
8.4.3 旅行商問題
8.4.4 手寫字符識別問題
8.5 習(xí)題
第9章 專用算法設(shè)計技術(shù)
9.1 數(shù)據(jù)壓縮算法
9.1.1 數(shù)據(jù)壓縮概述
9.1.2 無損壓縮算法
9.1.3 有損壓縮算法
9.2 數(shù)據(jù)加密算法
9.2.1 數(shù)據(jù)加密概述
9.2.2 傳統(tǒng)加密算法
9.2.3 非對稱加密算法
9.3 字符串匹配算法
9.3.1 BF匹配算法
9.3.2 RK匹配算法
9.3.3 KMP匹配算法
9.3.4 BM匹配算法
9.4 習(xí)題
參考文獻(xiàn)