計算機常用算法與程序設計案例教程(第3版)
定 價:¥69
中 教 價:¥41.40 (6.00折)
庫 存 數: 22
叢 書 名:高等院校信息技術系列教材
本書遵循精選案例,面向設計,深入淺出,注重能力培養的宗旨,以案例形式實現算法與程序設計教學。本書選取枚舉、遞推、遞歸、回溯、動態規劃、貪心算法、分支限界法與模擬等常用算法,并精選應用各算法設計求解的典型案例。書中每個案例求解,從案例提出到算法設計與程序實現,從案例結果顯示到算法改進與程序優化,環環相扣,融為一體,力求算法理論與實際應用相結合、算法與程序相統一,突出算法在解決實際案例中的核心地位與引導作用。書中所有案例求解均給出詳細的算法設計提要與完整的C程序清單,所有程序均在VC 6.0編譯通過,所有源代碼均可從指定網站下載。本書可作為高等院校計算機及相關專業算法設計與分析程序設計基礎與應用等課程的教材,也可供各類計算機程序設計競賽與計算機編程培訓參考。
(1)首創案例形式實現算法與程序設計教學。通過實際案例的求解見證算法設計的神奇與功效,實現以典型案例支撐算法設計,以算法設計指導案例求解的良性循環。 (2)注重常用算法的選取與組織。 在常用算法的選取上克服貪多求全、貪廣求深,去除若干難度大、理論深、少有應用的算法羅列,結合本科教學目標與應用實際,選取常用算法。 (3)注重典型案例的精選與提煉。 針對選取的每一種常用算法,精選典型的實際應用案例。 (4)注重算法設計與程序實現的緊密結合。本教程對每一 種常用算法的設計規范,具體落實到實際案例求解的各個環節:有算法設計提要、有程序實 現清單,有運行示例顯示,有算法改進與程序優化,環環相扣,融為一體。 (5)注重算法改進與程序優化。 教程對一些典型案例應用多種不同的算法設計,編寫不同表現形式與設計風格的程序, 充分體現了算法與程序設計的靈活性和多樣性。
計算機常用算法與程序設計案例教程(第3版)前言前言計算機算法與程序設計是計算機科學與技術的核心內容,是大學計算機相關專業的重要專業基礎課。通過對現有計算機專業算法設計與分析教學的調研分析,很多同學對學過的算法思路不明了,描述不清楚,設計不到位,無法應用算法設計程序解決一些常見的實際問題。造成這一局面的重要原因之一是缺少適合計算機本科層次的算法與程序設計教材。一般現有算法設計與分析教材在算法選取上貪多求全、貪廣求深,混雜一些難度大、理論深、少有應用的算法羅列。同時,在講授算法時存在對算法的抽象描述多,應用算法設計解決實際問題少等偏差,造成算法與程序設計脫節,算法理論與實際應用脫節,不利于學生應用算法與程序設計解決實際問題能力的提高。為此,我們對《計算機程序設計經典題解》(清華大學出版社, 2007)、《至美C程序設計》(中國水利水電出版社,2016)與《計算機常用算法與程序設計教程》(第2版, 人民郵電出版社, 2017)等進行優化整合,推出適合本科算法與程序設計教學實際的案例教程。本書遵循精選案例,面向設計,深入淺出,注重能力培養的宗旨,在常用算法典型案例的選取與深度的把握上,在算法理論與案例求解的結合上進行精心設計,力圖適合高校計算機本科教學目標與知識結構的要求。本書具有以下5個特色。1. 首創案例形式實現算法與程序設計教學學習算法與程序設計是為了培養提高學生應用算法與程序設計解決實際問題的能力,算法與程序設計課程教學無疑是最適宜以案例形式來實現的。通過實際案例的求解見證算法設計的神奇與功效,實現以典型案例支撐算法設計,以算法設計指導案例求解的良性循環。采用案例形式實現算法與程序設計教學在全國屬首創。對每個案例求解,從案例提出到算法設計、從程序實現到顯示運行結果,從算法分析到程序設計優化,環環相扣,融為一體,讓學生看得見、摸得著、學得會、用得上,從而收到立竿見影、舉一反三的效果。2. 注重常用算法的選取與組織在常用算法的選取上克服貪多求全、貪廣求深,去除若干難度大、理論深、少有應用的算法羅列,結合本科教學目標與應用實際,選取枚舉、遞推、遞歸、回溯、動態規劃、貪心算法、分支限界法與模擬等常用算法。注意到分支限界是一種以廣度優先搜索最優解的基本算法,本版將分支限界法列入常用算法之中。特別指出的是,模擬算法中的豎式運算模擬是總結推廣數論高精度計算的創新成果。對精選的各種常用算法,在介紹算法的基本理論與設計思路基礎上,從實際案例的求解入手,重點突出該算法的基本思路、設計規范與實施步驟,列出程序清單,顯示案例求解結果,達到清晰明了、水到渠成的效果。3. 注重典型案例的精選與提煉針對選取的每一種常用算法,精選典型的實際應用案例,包括基本的數值求解、常規的數據處理、有趣的智力測試、巧妙的模擬探索,既有引導入門的基礎案例,也有難度較大的綜合案例;既有歷史悠久的經典名題,也有構思巧妙的新創趣題,難度適宜,深入淺出。培養學生的學習興趣,激發學生的學習熱情,不是一兩句空洞說教所能奏效的,必須通過一系列有趣的實際案例來引導。本書針對所精選的常用算法,設計出初等難度基礎型、中等難度提升型、較高難度綜合型3種梯度的實際案例。這些案例的精選與提煉,有利于提高學生學習算法與程序設計的興趣,有利于學生在計算機實際應用方面開闊視野,使之在算法思路的開拓與設計技能的運用上有一個深層次的鍛煉與提高。其中,難度較大的綜合案例可作為相應課程的課程設計選用。4. 注重算法設計與程序實現的緊密結合算法與程序實際上是一個統一體,不應該也不可能將它們對立與分割。本書對每一種常用算法的設計規范,具體落實到實際案例求解的各個環節: 有算法設計提要,有程序實現清單,有運行示例顯示,有算法改進與程序優化,環環相扣,融為一體。通過算法設計與程序實現的緊密結合,突出算法在解決實際案例中的核心地位與引導作用,不斷加深對所學算法的理解和領悟,切實提升應用所學算法解決實際問題的能力。本書采用功能豐富、應用面廣、高校學生使用率最高的 C語言描述算法、編寫程序。為使用方便,所有程序均在VC 6.0編譯通過。5. 注重算法改進與程序優化本書對一些典型案例應用多種不同的算法設計,編寫不同表現形式與設計風格的程序,充分體現了算法與程序設計的靈活性和多樣性。算法與程序設計都不是一成不變的,可以實施多層次全方位的變通,變通出成果,變通長能力。算法改進與程序優化的過程,既是提高案例求解效率的過程,也是算法設計能力培養與提高的過程,更是優化意識與創新能力增強的過程。為方便算法設計練習與查閱,附錄中提供部分習題求解提示,介紹在VC 6.0環境下運行C程序的方法,并列出C語言常用函數。書中的所有案例源程序與部分習題源代碼均可在指定網站下載。在書稿的編寫與修訂過程中,湖南理工學院教務處及王岳斌教授、嚴權峰教授、周持中教授等給予了多方面支持與幫助,筆者在此一并深表感謝。盡管每個案例求解都經反復核實檢查,每個求解程序都經多輪運行調試,因涉及內容較廣,難免存在差錯,懇請各位讀者批評指正。
楊克昌2023年11月于岳陽南湖
第1章算法與程序設計概述11.1算法及其描述11.1.1算法定義11.1.2算法描述31.2算法的復雜性分析71.2.1時間復雜度71.2.2空間復雜度121.3算法設計與分析示例131.3.1求解最大公約數131.3.2拆分為連續正整數之和141.3.3統計n!尾部零161.4算法與程序設計181.4.1算法與程序181.4.2結構化程序設計23習題125第2章枚舉272.1枚舉概述272.2素數與合數282.2.1區間素數搜索292.2.2探求合數世紀302.2.3合數的質因數分解322.3解方程342.3.1佩爾方程352.3.2超越方程362.4解不等式382.4.1分數不等式382.4.2代數和不等式392.5求最值422.5.1基于素數的代數和422.5.2整數的因數比432.6整數拆分452.6.1簡單的整幣兌零452.6.2拆分構建雙和二組482.7數式探求502.7.1逆序乘積式502.7.2完美綜合式512.8趣味數陣542.8.1素數幻方542.8.2和積三角形572.9枚舉應用小結59習題262第3章遞推643.1遞推概述643.1.1遞推算法643.1.2遞推實施步驟與描述653.2超級素數搜索663.3遞推數列693.3.1擺動數列703.3.2分數數列713.4冪序列723.4.1雙冪序列723.4.2冪積序列743.5數陣與網格793.5.1楊輝三角793.5.2交通方格網813.6整數劃分問題833.6.1整數劃分遞推設計833.6.2整數劃分遞推優化843.7增強型整幣兌零863.8猴子爬山893.8.1簡單案例的具體遞推893.8.2一般情形的分級遞推903.9遞推應用小結92習題393第4章遞歸954.1遞歸概述954.2排隊購票984.3漢諾塔問題994.3.1求移動次數1004.3.2展示移動過程1014.4旋轉數陣1024.4.1雙轉向旋轉方陣1024.4.2m行n列順轉矩陣1054.5快速排序與選擇1074.5.1快速排序1074.5.2分區交換選擇1104.6排列組合的實現1124.6.1實現排列A(n,m)1124.6.2實現組合C(n,m)1144.6.3復雜排列1164.7整數的拆分1184.7.1拆分零數取自連續區間1184.7.2拆分零數取自指定整數1194.8遞歸應用小結121習題4124第5章回溯法1255.1回溯法概述1255.1.1回溯的概念1255.1.2回溯描述1255.2橋本分數式與10數字分數式1295.2.1橋本分數式1295.2.210數字分數式1315.3直尺與串珠1335.3.1古尺神奇1335.3.2數碼串珠1355.4逐位整除數1375.5環序列1415.5.1素數和環1415.5.2德布魯金環1425.6伯努利裝錯信封問題1445.6.1裝錯信封問題1455.6.2特殊錯位探索1485.7別出心裁的情侶拍照問題1505.7.1逐位安排與回溯1505.7.2成對安排與回溯1525.8回溯應用小結153習題5156第6章動態規劃1576.1動態規劃概述1576.1.1動態規劃的概念1576.1.2動態規劃實施步驟1586.2最長子序列探索1596.2.1最長非降子序列1596.2.2最長公共子序列1626.3最優路徑搜索1646.3.1點數值三角形的最優路徑1656.3.2邊數值矩形的最優路徑1666.4裝載問題1696.501背包問題1736.5.1一般01背包問題1736.5.2二維約束01背包問題1776.6凸n邊形的三角形劃分1796.7插入乘號問題1816.8動態規劃應用小結184習題6186第7章貪心算法1887.1貪心算法概述1887.2刪數字問題1907.3埃及分數式1927.3.1選擇最小分母構建1937.3.2貪心選擇范圍的擴展1947.4可拆背包問題1957.5數列操作與極差1977.5.1數列操作1977.5.2數列操作優化1987.5.3數列極差2007.6哈夫曼樹及其應用2027.6.1哈夫曼樹2027.6.2哈夫曼編碼2047.7貪心算法應用小結207習題7208第8章分支限界法2108.1分支限界法概述2108.2搜索迷宮最短通道2118.2.1矩陣迷宮2128.2.2三角迷宮2178.3增強型裝載問題2208.4增強型01背包問題2238.5新奇的八數碼游戲2268.5.1移動常規設計2278.5.2數組優化設計2318.6分支限界法應用小結234習題8235第9章模擬2369.1模擬概述2369.1.1模擬分類2369.1.2豎式運算模擬2399.2精彩乘積式2419.2.1積由指定一個整數重復構成2419.2.2積由指定兩個整數構成2459.2.3二部數積(ACM背景)2499.3尾數前移問題2529.3.1限1位尾數前移2529.3.2多位尾數前移2549.4階乘冪與排列組合數的計算2559.5高精度計算圓周率2579.6模擬發橋牌2619.7泊松分酒問題2639.8模擬應用小結266習題9267第10章算法的綜合應用26810.1高斯八皇后問題26810.1.1高斯八皇后問題概述26810.1.2n皇后問題27010.1.3皇后全控棋盤問題27410.2翻轉硬幣游戲27710.2.1翻轉m9矩陣27810.2.2翻轉mn矩陣28010.2.3大規模矩陣求解28310.3馬步遍歷與哈密頓圈28610.3.1馬步遍歷28610.3.2馬步型哈密頓圈29310.3.3組合型哈密頓圈29710.4綜合應用小結304習題10304附錄A部分習題求解提示306附錄B在VC 6.0環境下運行C程序方法簡介323附錄CC語言常用庫函數327參考文獻331