本書遵循“精選案例,深入淺出,面向設(shè)計,注重能力培養(yǎng)”的要求,系統(tǒng)講述枚舉、遞推、遞歸、回溯法、動態(tài)規(guī)劃、貪心算法、分支限界法與模擬等常用算法及其應(yīng)用。精選各算法設(shè)計求解的典型案例,從案例提出到算法設(shè)計、從程序?qū)崿F(xiàn)到復(fù)雜度分析,環(huán)環(huán)相扣,融為一體,力求算法理論與實踐應(yīng)用相結(jié)合、算法與程序相統(tǒng)一,突出算法在程序設(shè)計中的核心地位與引導(dǎo)作用。
書中所有案例給出算法設(shè)計要點與完整的C程序代碼,并給出程序運行示例(均在Visual C++ 6.0編譯通過)與算法分析。為方便教學(xué),每章都附有習(xí)題,同時推出與本書配套的課件供教學(xué)選用。書中所有源代碼、部分習(xí)題解答提示與配套課件均可從人郵教育社區(qū)(http://www.ryjiaoyu.com)下載。
本書可作為高等院校計算機(jī)相關(guān)專業(yè)“算法設(shè)計與分析”和“程序設(shè)計基礎(chǔ)與應(yīng)用”等課程的教材,也可供軟件設(shè)計人員和程序設(shè)計愛好者學(xué)習(xí)參考。
楊克昌:湖南理工學(xué)院計算機(jī)學(xué)院教授,長年從事教學(xué)改革并取得校級與省級教學(xué)成果獎多項,對本科有關(guān)算法與程序設(shè)計的教學(xué)目標(biāo)、教學(xué)要求與學(xué)生的實際非常熟悉,教學(xué)經(jīng)驗豐富。編寫過教材:C語言程序設(shè)計、計算機(jī)程序設(shè)計經(jīng)典題解、趣味C程序設(shè)計集錦、趣味Visual FoxPro程序設(shè)計集錦、至美—C程序設(shè)計、計算機(jī)常用算法與程序設(shè)計教程。
第1章算法與程序設(shè)計概述1
1.1算法概念與描述1
1.1.1算法概念1
1.1.2算法描述3
1.2算法復(fù)雜性分析6
1.2.1時間復(fù)雜度7
1.2.2空間復(fù)雜度12
1.3算法設(shè)計與分析示例12
1.3.1最大公約數(shù)12
1.3.2同碼小數(shù)和13
1.3.3平方根不等式15
1.4算法與程序設(shè)計16
1.4.1算法與程序16
1.4.2結(jié)構(gòu)化程序設(shè)計20
習(xí)題122
第2章枚舉24
2.1枚舉概述24
2.2求和與統(tǒng)計26
2.2.1求代數(shù)和26
2.2.2倍和數(shù)探索26
2.3整數(shù)搜索31
2.3.1探求p-完全數(shù)31
2.3.2搜索合數(shù)世紀(jì)32
2.4解方程與不等式33
2.4.1解佩爾方程33
2.4.2解分式不等式35
2.5分解與重組35
2.5.1質(zhì)因數(shù)分解36
2.5.2探索雙和3元2組38
2.6運算數(shù)式構(gòu)建39
2.6.1探索完美綜合運算式39
2.6.2構(gòu)建對稱數(shù)式42
2.7數(shù)陣與圖形46
2.7.1探求3階素數(shù)幻方46
2.7.2構(gòu)建和積三角形49
2.8枚舉設(shè)計優(yōu)化51
2.8.1優(yōu)化枚舉結(jié)構(gòu)51
2.8.2精簡枚舉參數(shù)52
習(xí)題254
第3章遞推56
3.1遞推概述56
3.2超級素數(shù)搜索58
3.3裴波那契序列與盧卡斯序列62
3.4多關(guān)系遞推63
3.4.1雙冪序列63
3.4.2雙關(guān)系遞推數(shù)列65
3.4.3威佐夫數(shù)對序列67
3.5數(shù)陣與網(wǎng)格68
3.5.1構(gòu)建楊輝三角68
3.5.2方格網(wǎng)交通線路70
3.6水手分椰子71
3.6.15個水手分椰子72
3.6.2探求n個水手分椰子75
3.7整幣兌零76
3.7.1特定零幣兌零76
3.7.2一般零幣兌零78
3.8遞推小結(jié)80
習(xí)題381
第4章遞歸83
4.1遞歸概述83
4.2購票排隊86
4.3漢諾塔游戲87
4.3.1計算移動次數(shù)88
4.3.2展示移動過程89
4.4雙轉(zhuǎn)向旋轉(zhuǎn)方陣90
4.5分區(qū)交換排序與選擇93
4.5.1分區(qū)交換排序93
4.5.2分區(qū)交換選擇96
4.6排列組合實現(xiàn)97
4.6.1實現(xiàn)排列A(n,m)98
4.6.2實現(xiàn)組合C(n,m)99
4.7整數(shù)拆分102
4.7.1零數(shù)取自指定區(qū)間102
4.7.2零數(shù)取自指定整數(shù)集104
4.8遞歸小結(jié)105
習(xí)題4108
第5章回溯法110
5.1回溯法概述110
5.1.1回溯概念110
5.1.2回溯描述111
5.2橋本分?jǐn)?shù)式114
5.2.19數(shù)字橋本分?jǐn)?shù)式115
5.2.2探求10數(shù)字分?jǐn)?shù)式119
5.3素數(shù)和環(huán)120
5.4直尺與數(shù)珠124
5.4.1神奇古尺124
5.4.2數(shù)碼串珠126
5.5錯位排列探索128
5.5.1伯努利裝錯信封問題128
5.5.2特殊錯位排列130
5.6情侶拍照排列132
5.6.1逐位回溯132
5.6.2成對回溯134
5.7回溯法小結(jié)136
習(xí)題5138
第6章動態(tài)規(guī)劃139
6.1動態(tài)規(guī)劃概述139
6.1.1動態(tài)規(guī)劃概念139
6.1.2動態(tài)規(guī)劃設(shè)計規(guī)范141
6.20-1背包問題141
6.3最小子段和145
6.3.1序列最小子段145
6.3.2環(huán)序列最小子段147
6.4最優(yōu)插入乘號151
6.5最長子序列探索153
6.5.1最長非降子序列153
6.5.2最長公共子序列156
6.6凸形的三角形劃分158
6.7動態(tài)規(guī)劃小結(jié)161
習(xí)題6161
第7章貪心算法163
7.1貪心算法概述163
7.2刪數(shù)字最值問題164
7.3可拆背包問題167
7.4構(gòu)建埃及分?jǐn)?shù)式168
7.4.1優(yōu)先選擇最小分母169
7.4.2擴(kuò)展分母選擇范圍170
7.5數(shù)列壓縮問題172
7.5.1數(shù)列壓縮的最大值172
7.5.2數(shù)列壓縮的極差174
7.6哈夫曼樹與編碼176
7.6.1構(gòu)建哈夫曼樹176
7.6.2實現(xiàn)哈夫曼編碼179
7.7貪心算法小結(jié)182
習(xí)題7183
第8章分支限界法185
8.1分支限界法概述185
8.2搜索迷宮最短通道187
8.2.1矩陣迷宮187
8.2.2三角迷宮191
8.3裝載問題194
8.3.1回溯設(shè)計194
8.3.2分支限界設(shè)計196
8.40-1背包問題198
8.58數(shù)碼游戲201
8.5.1移動常規(guī)設(shè)計201
8.5.2數(shù)組優(yōu)化設(shè)計206
8.6分支限界法小結(jié)209
習(xí)題8210
第9章模擬211
9.1模擬概述211
9.1.1模擬概念211
9.1.2豎式乘除模擬214
9.2探求乘數(shù)216
9.2.1積為“1”構(gòu)成216
9.2.2積為指定數(shù)構(gòu)成217
9.3尾數(shù)前移問題218
9.3.1尾數(shù)限一個數(shù)字218
9.3.2尾數(shù)為多位數(shù)220
9.4階乘冪與排列組合計算222
9.5圓周率高精度計算223
9.6模擬發(fā)撲克牌226
9.7泊松分酒問題228
9.8模擬小結(jié)231
習(xí)題9232
第10章算法綜合應(yīng)用與優(yōu)化233
10.1冪積序列233
10.1.1雙冪積探索233
10.1.2探討3冪積序列237
10.2指定碼串積240
10.2.1探求0-1串積240
10.2.2指定2碼串積243
10.2.3指定多碼串積245
10.3皇后問題247
10.3.1高斯8后問題247
10.3.2探索n皇后問題249
10.3.3皇后全控棋盤252
10.4馬步遍歷與哈密頓圈255
10.4.1馬步遍歷探索255
10.4.2最長馬步路徑258
10.4.3馬步型哈密頓圈262
10.5綜合應(yīng)用小結(jié)266
習(xí)題10267
附錄A在VisualC++6.0環(huán)境下運行C程序方法簡介268
附錄BC語言常用庫函數(shù)272
參考文獻(xiàn)276