![]() ![]() |
算法設(shè)計與分析 ![]()
算法在計算機中扮演著重要角色,它對計算機科學的發(fā)展起著重要的推動作用。算法可以被看作解決問題的方法,盡管它不是問題的答案,但它是經(jīng)過準確定義以獲得答案的過程,因此特定的算法設(shè)計技術(shù)可以作為問題求解的有效策略,學習算法可以培養(yǎng)學生分析問題和解決問題的能力。本書主要內(nèi)容包括算法效率的分析方法,算法工具STL的使用,蠻力法、遞歸法、分治法、貪心法、動態(tài)規(guī)劃法、回溯法和分支限界法七個核心算法的原理與經(jīng)典問題的解決對策,學生如果具備了本課程算法設(shè)計的基本方法,可進一步學習本課程的圖的搜索算法、計算幾何算法、隨機算法三大專題深入學習。
《算法設(shè)計與分析》是一本集系統(tǒng)性、實用性、思想性于一體的優(yōu)質(zhì)書籍。無論你是初涉算法領(lǐng)域的新手,還是尋求突破的專業(yè)人士,都能從這本書中汲取知識的養(yǎng)分。希望大家能通過這本書開啟算法學習的奇妙之旅,在計算機科學的天空中翱翔。
前言
教育是國之大計、黨之大計。黨的二十大報告明確提出, 堅待教育優(yōu)先發(fā)展, 到
2035年建成教育強國, 首次將“實施科教興國戰(zhàn)略, 強化現(xiàn)代化建設(shè)人才支撐”作為一個
單獨部分, 并把“教育、科技和人才”三者聯(lián)系在一起加以論述、部署, 且有關(guān)教育的論
述出現(xiàn)在經(jīng)濟之后, 排在各項戰(zhàn)略任務的第二位, 充分體現(xiàn)了教育的基礎(chǔ)性、戰(zhàn)略性地
位和作用。
隨著大數(shù)據(jù)時代的到來, “ 數(shù)據(jù)挖掘”“人工智能”等與算法相關(guān)的詞語已成為IT行業(yè)
流行的詞匯。若想以最少的成本、最快的速度、最好的質(zhì)量開發(fā)出適合各種應用需求的
軟件, 就必須遵循軟件工程的原則, 設(shè)計出高效率的程序。軟件的效率和穩(wěn)定性取決于
軟件中所采用的算法, 然而, 程序設(shè)計的“靈魂”就是解決問題的算法。現(xiàn)階段, 我國對
千算法方面的人才需求與H俱增, 為了滿足這一需求, 培養(yǎng)出優(yōu)秀的軟件研究與設(shè)計人
才, 絕大多數(shù)高校的計算機及相關(guān)專業(yè)開設(shè)了"算法設(shè)計與分析“課程, 它早已成為計算
機科學與技術(shù)、智能科學與技術(shù)、軟件工程、人工智能等本科專業(yè)的核心課程。
為了適應“新工科“背泉下計算機相關(guān)專業(yè)算法類課程的教學模式及我國計算機各類
人才的需要, 本書以算法設(shè)計策略為主線, 系統(tǒng)地介紹了計算機算法的設(shè)計方法與分析
技巧, 以期為計算機學科的學生提供廣泛而堅實的計算機算法基礎(chǔ)知識, 提升學生的算
法設(shè)計能力、綜合應用能力和創(chuàng)新能力, 立足培養(yǎng)學生跟上國際計算機科學技術(shù)的發(fā)展
水平。
本書對各類算法的介紹深入淺出、通俗易懂, 注重理論與實踐相結(jié)合。為了適應高
等院校的人才培養(yǎng)模式, 本書各章均配套相關(guān)的實驗內(nèi)容, 以增強學生學有所得和學有
所用的體驗, 激發(fā)學生學習算法設(shè)計相關(guān)知識的興趣。在學習本書之前, 學生已經(jīng)學習
了基本的數(shù)據(jù)結(jié)構(gòu)知識, 能熟練運用一門或多門編程語言, 并具備了一定的編程經(jīng)驗。
讓學生能夠利用巳學過的知識針對不同的實際問題設(shè)計出有效的算法, 是本書所要達到
的目的。本書的特點是“問題模型化, 求解算法化, 設(shè)計最優(yōu)化”。
1. 本書內(nèi)容
全書共10章, 各章的內(nèi)容如下。
第1章為算法設(shè)計與分析基礎(chǔ), 主要介紹算法、算法設(shè)計、算法分析的基本概念, 以
及常見重要問題的類型和常用算法的設(shè)計方法。
第2章為算法工具STL, 主要介紹標準模板庫STL, STL是C++程序員必須掌握
的模板庫, 掌握它對提升C++編程大有益處。
第3章為蠻力法, 介紹了蠻力法的概念與特點, 討論了運用蠻力策略解決幾類常見排
序問題的設(shè)計思想, 并介紹了與蠻力法相關(guān)的兒個經(jīng)典問題。
第4章為遞歸與分治法, 介紹了遞歸技術(shù)和分治法的基本思想, 遞歸設(shè)計實例, 以及分治法在二分查找、歸并排序、快速排序、堆排序、棋盤覆蓋、最大子段和等問題中的應用。這是設(shè)計有效算法最常用的策略之一,是必須掌握的方法。
第5章為貪心法,介紹了貪心法的基本思想,以及貪心法在經(jīng)典問題中的應用,這是一種非常重要的算法設(shè)計策略,其計算效率很高。按貪心法設(shè)計出的許多算法能得出最優(yōu)解,其中有許多典型問題和典型算法可供學生學習和使用。
第6章為動態(tài)規(guī)劃法,介紹了動態(tài)規(guī)劃的原理和求解步驟,討論了采用動態(tài)規(guī)劃法求解斐波那契數(shù)列、排隊買票問題、湊硬幣問題、數(shù)字塔問題、最長公共子序列問題、流水作業(yè)調(diào)度問題、資源分配問題、最短路徑問題等經(jīng)典問題的算法設(shè)計。
第7章為回溯法與分支限界法,介紹了問題的解空間的概念和回溯法與分支限界法的基本思想,討論了回溯法與分支限界法的異同,并對比了這兩種算法在0/1背包問題、旅行商問題等經(jīng)典問題中的應用。
第8章為圖的搜索算法,在前7章討論過的算法設(shè)計方法的基礎(chǔ)上設(shè)計了有效的圖的搜索算法,探討了兒個基本應用問題,并介紹了網(wǎng)絡(luò)流的相關(guān)概念以及求最大流、割集與割量、求最小費用最大流的算法。
第9章為計算幾何算法,介紹了計算幾何中常用的向量運算以及求解凸包問題、最近點對問題和最遠點對問題的典型算法。
第10章為隨機算法,主要討論了蒙特卡羅算法、舍伍德算法和拉斯維加斯算法3類隨機算法的應用。
2.本書特色
(1)課程思政融入教學
本課程要求學生具備算法設(shè)計與分析技能的同時,更關(guān)注大學生的心理健康問題。
本書配套的電子資料包含大量教學案例,引導學生樹立正確的價值觀和人生觀,激發(fā)學
生科技報國的歷史擔當,自覺抵制外界的一些負面影響和誘惑,幫助學生把精力集中到
學習科學知識的主業(yè)中,培養(yǎng)學生具備精益求精的工匠精神、科技報國的使命擔當,以
及堅定“ 四個自信"的愛國主義精神。本課程的主講教師應秉承創(chuàng)新精神、匠心精神,與
時俱進地不斷完善和提升課程質(zhì)屈,力爭為祖國培養(yǎng)更多德才兼?zhèn)涞那嗄瓴趴,為教學
改革貢獻自己的力量。
(2)編程語言之間的共性與個性的比較
本書的核心語言是C 語言,第3~第7章中核心算法的經(jīng)典問題的代碼采用了C、
C+ +語言同時實現(xiàn)(Java的完整實現(xiàn)代碼掃二維碼可以查閱),同一個算法使用多種語言
進行編寫、對比和分析,能提高學生的綜合能力。本書是一本既能讓學生清晰、輕松地
理解算法思想,又能讓學生編程實現(xiàn)算法的實用書籍。
(3)由淺入深,循序漸進
每種算法策略從設(shè)計思想、算法框架入手,巾易到難地講解經(jīng)典問題的求解過程,
使讀者既能學到求解問題的方法,又能通過對算法策略的反復應用掌握其核心原理,以
達到融會貫通之效。
,. 急尸··`·
' , ! 2 ;
魚
. ....,
},
(4)注重問題導向的學習內(nèi)容設(shè)計
本書將各種算法應用于多個有趣的現(xiàn)實問題的解決過程中,以問題為導向來促進學生思考并體會算法的精妙之處與用途, 進而提升其學習效果。
(5)注重求解問題的多維性
同一個問題可采用多種算法策略實現(xiàn), 如0/1背包問題分別采用回溯法、分支限界法
和動態(tài)規(guī)劃法求解。通過不同算法策略的比較, 使學生更容易體會到每一種算法策略的
設(shè)計特點和優(yōu)缺點, 以提高其算法設(shè)計的效率。
(6)配套資源豐富
為了加深學生對知識的理解, 各章配有難易適當?shù)牧曨}、實驗題, 以適應不同程度
的學生練習的需要。本書還配套有教學計劃、教學大綱、PPT課件、教材源代碼、實驗
源代碼等豐富的教學資源供教師授課使用。
3. 結(jié)束語
本書由蘭州財經(jīng)大學高麗偉、楊海軍, 貴州大學薛現(xiàn)斌共同編著而成。其中, 高麗
偉編寫了第4、第5、第6、第7、第10章;楊海軍編寫了第2、第9章, 并完成了本書圖
片的繪制和校正工作;薛現(xiàn)斌編寫了第1、第3、第8章, 并負責全書代碼的測試和校正
工作。
本書是課程組全休教師多年教學經(jīng)驗的總結(jié)和體現(xiàn), 在編寫過程中, 編者參考了很
多同行的教材和網(wǎng)絡(luò)博客。由千編者水平有限, 書中疏漏在所難免, 故殷切希望廣大讀
者及同行專家、教師能夠批評指正, 以便修改完善。編者E-mail為glwdz324@163.com 。
編者
2024年9月
.......
高麗偉,本碩畢業(yè)于貴州大學計算機專業(yè),已有8年教齡,一直為計算機科學與技術(shù)、智能科學與技術(shù)、電子商務等本科專業(yè)講授算法設(shè)計與分析課程,對于該教材積累了一定的教學和編寫經(jīng)驗。
目錄
第1 章算法設(shè)計與分析基礎(chǔ)........................................................................ 1
1. 1 算法概述....................................................................................... l
1. 1. 1 什么是算法........................................................................ 1
1. 1. 2 學習算法的重要性............................................................... 7
1.2 問題的求解過程.............................................................................. 8
1. 2. 1 問題及問題的求解過程......................................................... 8
1. 2. 2 算法設(shè)計與算法表示............................................................ 9
1. 2. 3 算法確認和算法分析............................................................ 10
1. 3 數(shù)學基礎(chǔ).................................................................................... 13
1. 3. 1 函數(shù)的漸近的界.................................................................. 14
1. 3. 2 利用極限求函數(shù)的漸近的界... ... ... ... .................. ...... ...... .........17
1. 3. 3 常用的求和級數(shù)及推導方法…………………………………………… 19
1. 3. 4 基本漸近效率類型............................................................... 21
1. 4 算法分析.................................................................................... 2 2
1. 4. 1 算法的時間復雜度分析......................................................... 22
1. 4. 2 算法的空間復雜度分析......................................................... 28
1. 4. 3 非遞歸算法分析.................................................................. 29
1. 4. 4 遞歸算法分析..................................................................... 30
1.5 關(guān)千P類、NP類和NPC類問題……………………………………… ……… 33
1. 6 本章小結(jié).................................................................................... 34
1. 7 習題.......................................................................................... 35
1.8 實驗題....................................................................................... 36
第2章算法工具STL ················································································· 38
2. 1 STL概述.................................................................................... 38
2. 1. 1 什么是STL容器.................................................................. 39
2. 1. 2 什么是STL算法.................................................................. 39
2. 1. 3 什么是STL迭代器............................................................... 40
2. 2 常用的STL容器........................................................................... 41
2. 2. 1 順序容器........................................................................... 41
2.2. 2 關(guān)聯(lián)容器........................................................................... 49
2. 2. 3 適配器容器........................................................................ 52
2. 3 STL在算法設(shè)計中的應用............................................................... 55
2.4 本章小結(jié).................................................................................... 67
2. 5 習題.......................................................................................... 68
2. 6 實驗題....................................................................................... 69
第3章蠻力法.......................................................................................... 72
3. 1 蠻力法概述................................................................................. 72
3. 1. 1 蠻力法的基本思想............................................................... 72
3. 1. 2 蠻力法解題格式.................................................................. 75
3. 2 蠻力法的應用.............................................................................. 83
3. 2. 1 百錢百雞問題..................................................................... 84
3. 2. 2 獄吏問題........................................................................... 85
3. 2. 3 順序查找........................................................................... 88
3.2.4 簡單排序算法..................................................................... 89
3. 2. 5 求解幕集問題..................................................................... 95
3. 2. 6 求解0/1 背包問題............................................................... 98
3. 2. 7 求解最大連續(xù)子序列和問題………………………………………… 102
3. 3 本章小結(jié).................................................................................... 104
3. 4 習題.......................................................................................... 105
3. 5 實驗題....................................................................................... 105
第4章遞歸與分治法.............................................................................. 108
,. 急尸··`·
' , ! 2 ; 魚
. ....,
},
4. 1 遞歸算法的思想........................................................................... 108
4. 1. 1 遞歸算法的特性............................................................... 109
4. 1. 2 遞歸算法的執(zhí)行過程......................................................... 110
4. 1. 3 遞歸適用場合.................................................................. 112
4. 2 遞歸設(shè)計實例.............................................................................. 117
4. 2. 1 幾個簡單的遞歸程序......................................................... 117
4.2.2 排序問題........................................................................ 119
4.2.3 斐波那契數(shù)列問題............................................................ 121
4. 2. 4 n皇后問題........................................................................ 123
4. 2. 5 漢諾塔問題..................................................................... 125
4. 3 分治法的思想化整為零............................................................ 127
4. 4 分治法的應用.............................................................................. 129
4. 4. 1 二分查找算法.................................................................. 129
4. 4. 2 歸并排序算法.................................................................. 131
4. 4. 3 快速排序算法.................................................................. 134
4. 4. 4 堆排序算法..................................................................... 136
4. 4. 5 棋盤覆蓋問題.................................................................. 139
4. 4. 6 最大子段和問題............................................................... 142
4. 5 本章小結(jié)... ... ... ... .................. ... ...... ... ...... ... ... ... ............ ............... 144
4. 6 習題... ... ... .................. ... ...... ... ...... ............ ... ... ............ ............... 145
4. 7 實驗題... ... ..................... ...... ... ...... ... ............ ... ...... ... .................. 145
第5 章貪心法... ... ..................... ...... ... ...... ... ............ ... ...... ... .................. 148
5. 1 貪心法概述... ... ... ... .................. ...... ... ... ...... ... ... ...... ... .................. 148
5. 1. 1 問題的提出... ... ... .................. ... ...... ... ...... ............ ... ...... ... 148
5. 1. 2 貪心法設(shè)計思想... ... ... ... .................. ... ... ...... ...... ... ... ...... ... 150
5. 1. 3 貪心法的基本要素... ... ... .................. ... ... ...... ...... ............ ... 150
5. 1. 4 貪心法的求解過程... ... ... .................. ... ... ...... ...... ............ ... 151
5. 2 貪心法的應用... ... ... .................. ...... ... ... ...... ............ ... ...... ... ......... 152
5. 2. 1 活動安排問題... ... ... .................. ...... ... ...... ... ... ...... ......... ... 152
5. 2. 2 幣種統(tǒng)計問題... ... ... .................. ...... ... ...... ... ... ...... ......... ... 159
5. 2. 3 背包問題... ... ... ... .................. ... ...... ... ...... ... ... ...... ... ......... 160
5. 2. 4 多機調(diào)度問題... ... ... .................. ...... ... ...... ... ... ...... ......... ... 163
5. 2. 5 哈夫曼編碼... ... ... .................. ... ...... ... ...... ............ ... ...... ... 165
5. 2. 6 最小生成樹... ... ... .................. ... ...... ... ...... ............ ... ...... ... 172
5. 2. 7 求解流水作業(yè)調(diào)度問題... ...... .................. ...... ... ...... ...... ... ... 178
5. 2. 8 求解川忌賽馬問題... ... ... .................. ... ... ...... ...... ............ ... 182
5. 3 本章小結(jié)... ... ... ... .................. ... ...... ... ...... ... ... ... ............ ............... 185
5. 4 習題... ... ... .................. ... ...... ... ...... ............ ... ... ............ ............... 186
5. 5 實驗題... ... ..................... ...... ... ...... ... ............ ... ...... ... .................. 187
第6 章動態(tài)規(guī)劃法... ... ... ... .................. ...... ... ... ...... ... ... ...... ... .................. 190
6. 1 動態(tài)規(guī)劃法概述... ... ... ... .................. ... ... ...... ... ... ...... ... .................. 190
6. 1. 1 動態(tài)規(guī)劃法的基本思想... ...... .................. ...... ... ...... ...... ... ... 190
6. 1. 2 動態(tài)規(guī)劃的設(shè)計技術(shù)... ... ..................... ... ...... ...... ... ... ...... ... 192
6. 2 最優(yōu)決策表... ... ... ... .................. ...... ... ... ...... ... ... ...... ... .................. 195
6.2. 1 0/1 背包問題...... ... ... .................. ...... ... ...... ... ... ...... ......... ... 196
6.2. 2 0/1 背包的相關(guān)問題...... ... ..................... ... ...... ...... ... ... ...... ... 200
6. 3 動態(tài)規(guī)劃法的應用... ... ... ... .................. ... ...... ... ...... ... ... ...... ... ......... 202
6. 3. 1 斐波那契數(shù)列... ... ... .................. ...... ... ...... ... ... ...... ......... ... 202
6. 3. 2 排隊買票問題... ... ... .................. ...... ... ...... ... ... ...... ......... ... 203
6. 3. 3 湊硬幣問題... ... ... .................. ... ...... ... ...... ............ ... ...... ... 204
6. 3. 4 數(shù)字塔問題... ... ... .................. ... ...... ... ...... ............ ... ...... ... 207
6. 3. 5 最長公共子序列問題... ... ..................... ... ...... ...... ... ... ...... ... 211
6. 3. 6 流水作業(yè)調(diào)度問題... ... ... .................. ... ... ...... ...... ............ ... 214
6. 3. 7 資源分配問題... ... ... .................. ...... ... ...... ... ... ...... ......... ... 217
6. 3. 8 最短路徑問題... ... ... .................. ...... ... ...... ... ... ...... ......... ... 220
6. 4 本章小結(jié).................................................................................... 225
6. 5 習題.......................................................................................... 225
6. 6 實驗題....................................................................................... 227
第7 章回溯法與分支限界法..................................................................... 233
7. 1 回溯法的設(shè)計技術(shù)........................................................................ 233
7. 1. 1 回溯法的算法思想............................................................ 234
7. 1. 2 回溯法的算法框架............................................................ 236
7. 1. 3 回溯法的適用條件............................................................ 239
7. 2 回溯法的應用.............................................................................. 243
7. 2. 1 0/1 背包問題..................................................................... 243
7. 2. 2 n皇后問題........................................................................ 248
7.2.3 旅行商問題..................................................................... 250
7.2.4 圖的m著色問題............................................................... 253
7. 2. 5 求解子集和問題............................................................... 255
7. 3 分支限界法的設(shè)計技術(shù).................................................................. 258
7. 3. 1 分支限界法的思想............................................................ 258
7. 3. 2 分支限界法與回溯法對比...... ... ... .................. ...... ...... ......... 258
7. 3. 3 分支限界法解決的關(guān)鍵問題………………………………………… 259
7. 3.4 分支限界法的時間性能...................................................... 262
7. 4 分支限界法的應用........................................................................ 262
7. 4. 1 0/1 背包問題..................................................................... 262
7. 4. 2 旅行商問題..................................................................... 269
7. 5 本章小結(jié).................................................................................... 282
7. 6 習題.......................................................................................... 283
7. 7 實驗題....................................................................................... 284
第8 章圖的搜索算法.............................................................................. 288
,. 急尸··`·
' , ! 4 ;
魚
. ....,
},
8. 1 廣度優(yōu)先搜索.............................................................................. 288
8. 1. 1 算法描述與分析............................................................... 288
8. 1. 2 程序?qū)崿F(xiàn)........................................................................ 292
8. 2 深度優(yōu)先搜索.............................................................................. 297
8. 2. 1 算法描述與分析............................................................... 297
8.2.2 程序?qū)崿F(xiàn)........................................................................ 299
8. 3 有向圖的強連通分支..................................................................... 303
8. 4 無向圖的雙連通分支..................................................................... 307
8. 5 網(wǎng)絡(luò)流....................................................................................... 310
8. 5. 1 相關(guān)概念........................................................................ 310
8. 5. 2 求最大流........................................................................ 312
8. 5. 3 割集與割量..................................................................... 316
8. 5. 4 求最小費用最大流............................................................ 317
8. 6 本章小結(jié).................................................................................... 32 2
8. 7 習題.......................................................................................... 32 2
8. 8 實驗題....................................................................................... 323
第9 章計算幾何算法.............................................................................. 327
9. 1 線段的性質(zhì)................................................................................. 327
9. 2 向量運算.................................................................................... 328
9. 2. 1 向扯加減運算.................................................................. 329
9. 2. 2 向批點積運算.................................................................. 330
9. 3 叉積.......................................................................................... 331
9. 3. 1 叉積的計算..................................................................... 331
9. 3. 2 判斷相繼兩直線段左轉(zhuǎn)或右轉(zhuǎn)……………………………………… 332
9. 3. 3 兩個點的距離.................................................................. 333
9. 3. 4 點到線段的距離............................................................... 333
9. 4 線段的應用................................................................................. 334
9.4. 1 判斷一個點是否在一個矩形內(nèi)……………………………………… 334
9.4. 2 判斷一個點是否在一條線段上……………………………………… 335
9.4. 3 判斷兩條線段是否平行...................................................... 335
9.4. 4 判斷兩條線段是否相交...................................................... 336
9.4. 5 判斷一個點是否在多邊形內(nèi)………………………………………… 336
9.4. 6 求3 個點構(gòu)成的三角形面積………………………………………… 338
9.4. 7 求一個多邊形的面積......................................................... 338
9. 5 求解凸包問題.............................................................................. 340
9. 5. 1 卷包裹算法..................................................................... 341
9. 5. 2 葛立恒掃描法.................................................................. 342
9. 6 求解最近點對問題........................................................................ 344
9. 7 求解最遠點對問題........................................................................ 349
9. 8 本章小結(jié).................................................................................... 352
9. 9 習題.......................................................................................... 353
9. 10 實驗題.................................................................................... 353
第10 章隨機算法.................................................................................... 356
10.] 同余的概念.............................................................................. 356
10. 2 隨機數(shù).................................................................................... 358
10. 3 隨機算法................................................................................. 360
10. 3. 1 隨機算法的概念............................................................... 360
10. 3. 2 隨機算法的分類............................................................... 360
10.4 經(jīng)典隨機算法........................................................................... 361
10. 4. 1 蒙特卡羅算法.................................................................. 361
10. 4. 2 舍伍德算法..................................................................... 362
10. 4. 3 拉斯維加斯算法............................................................... 364
10. 5 本章小結(jié)................................................................................. 366
10. 6 習題....................................................................................... 366
10. 7 實驗題.................................................................................... 367
參考文獻................................................................................................ 368
,. 急尸··`· {
氣.6)
皇后問題、圖的m著色問題和裝載問題等。組合優(yōu)化問題就是找到該問題的一個或全部最優(yōu)解,如背包問題、子集和數(shù)問題及貨郎問題等。
你還可能感興趣
我要評論
|