出版時間:2011-7 出版社:清華大學(xué)出版社 作者:楊克昌
Tag標(biāo)簽:無
內(nèi)容概要
本書遵循“精選案例,面向設(shè)計,深入淺出,注重能力培養(yǎng)”的要求,以“案例”形式實現(xiàn)“算法與程序設(shè)計”教學(xué)。本書精選枚舉、遞推、遞歸、回溯、動態(tài)規(guī)劃、貪心算法與模擬等常用算法,精選各算法求解的典型案例,注重算法設(shè)計與程序?qū)崿F(xiàn),注重算法改進(jìn)與程序優(yōu)化,力求理論與實際相結(jié)合,算法與程序相統(tǒng)一。每一個案例求解,從案例提出、算法設(shè)計與描述,到程序?qū)崿F(xiàn)、運行結(jié)果與討論,環(huán)環(huán)相扣,融為一體。
本書所有案例求解給出詳細(xì)的算法描述與完整的c程序。每章最后附有習(xí)題,在附錄中給出習(xí)題求解提示,所有源程序可從清華大學(xué)出版社網(wǎng)站下載。
本書可作為高等院校計算機及相關(guān)專業(yè)“算法設(shè)計與分析”、“計算機程序設(shè)計”課程教材,也可供軟件設(shè)計人員與計算機愛好者學(xué)習(xí)參考。
書籍目錄
第1章 算法與程序設(shè)計概述
1.1 算法及其描述
1.1.1 算法定義
1.1.2 算法描述
1.2 算法的復(fù)雜性分析
1.2.1 時間復(fù)雜度
1.2.2 空間復(fù)雜度
1.3 算法與程序設(shè)計
1.3.1 算法與程序
1.3.2 結(jié)構(gòu)化程序設(shè)計
習(xí)題
第2章 枚舉
2.1 枚舉概述
2.2 統(tǒng)計與求和
2.2.1 指定特殊整數(shù)
2.2.2 最簡真分?jǐn)?shù)
2.3 解方程
2.3.1 解佩爾方程
2.3.2 解超越方程
2.4 解不等式
2.4.1 分?jǐn)?shù)不等式
2.4.2 代數(shù)和不等式
2.5 求最值
2.5.1 基于素數(shù)的代數(shù)和
2.5.2 整數(shù)的因數(shù)比
2.6 數(shù)組與數(shù)列
2.6.1 雙和數(shù)組
2.6.2 基于2x+3y的遞推數(shù)列
2.7 數(shù)式探求
2.7.1 逆序乘積式
2.7.2 完美綜合式
2.8 趣味數(shù)陣
2.8.1 素數(shù)幻方
2.8.2 和積三角形
2.9 枚舉應(yīng)用小結(jié)
習(xí)題
第3章 遞推
3.1 遞推概述
3.1.1 遞推算法
3.1.2 遞推實施步驟與描述
3.2 遞推數(shù)列
3.2.1 擺動數(shù)列
3.2.2 分?jǐn)?shù)數(shù)列
3.3 冪序列
3.3.1 雙冪序列
3.3.2 冪積序列
3.4 數(shù)陣探索
3.4.1 楊輝三角
3.4.2 折疊方陣
3.5 整數(shù)劃分問題
3.5.1 整數(shù)劃分遞推設(shè)計
3.5.2 整數(shù)劃分遞推優(yōu)化
3.6 水手分椰子問題
3.6.1 水手分椰子
3.6.2 n個水手分椰子
3.7 猴子爬山
3.7.1 簡單案例的具體遞推
3.7.2 一般情形的分級遞推
3.8 遞推應(yīng)用小結(jié)
習(xí)題
第4章 遞歸
4.1 遞歸概述
4.2 排隊購票
4.3 漢諾塔問題
4.3.1 求移動次數(shù)
4.3.2 展示移動過程
4.4 旋轉(zhuǎn)數(shù)陣
4.4.1 雙轉(zhuǎn)向旋轉(zhuǎn)方陣
4.4.2 m行n列順轉(zhuǎn)矩陣
4.5 快速排序與選擇
4.5.1 快速排序
4.5.2 分區(qū)交換選擇
4.6 排列組合的實現(xiàn)
4.6.1 實現(xiàn)排列?a(n,m?)
4.6.2 實現(xiàn)組合?c(n,m?)
4.6.3 實現(xiàn)復(fù)雜排列
4.7 整數(shù)的拆分
4.7.1 拆分零數(shù)取自連續(xù)區(qū)間
4.7.2 拆分零數(shù)取自指定整數(shù)
4.8 遞歸應(yīng)用小結(jié)
習(xí)題
第5章 回溯法
5.1 回溯法概述
5.1.1 回溯的概念
5.1.2 回溯描述
5.2 橋本分?jǐn)?shù)式
5.2.1 橋本分?jǐn)?shù)式概述
5.2.2 10數(shù)字分?jǐn)?shù)式
5.3 直尺與串珠
5.3.1 古尺神奇
5.3.2 數(shù)碼串珠
5.4 逐位整除數(shù)探索
5.4.1 高逐位整除數(shù)
5.4.2 低逐位整除數(shù)
5.5 環(huán)序列
5.5.1 素數(shù)和環(huán)
5.5.2 德布魯金環(huán)
5.6 裝錯信封問題
5.6.1 伯努利裝錯信封問題
5.6.2 特殊錯位探索
5.7 別出心裁的情侶拍照
5.7.1 逐位安排與回溯
5.7.2 成對安排與回溯
5.8 回溯應(yīng)用小結(jié)
習(xí)題
第6章 動態(tài)規(guī)劃
6.1 動態(tài)規(guī)劃概述
6.1.1 動態(tài)規(guī)劃的概念
6.1.2 動態(tài)規(guī)劃實施步驟
6.2 最長子序列探索
6.2.1 最長非降子序列
6.2.2 最長公共子序列
6.3 最優(yōu)路徑搜索
6.3.1 點數(shù)值三角形的最優(yōu)路徑
6.3.2 邊數(shù)值矩形的最優(yōu)路徑
6.4 裝載問題
6.5 0-1背包問題
6.5.1 一般0-1背包問題
6.5.2 二維約束0-1背包問題
6.6 插入乘號問題
6.6.1 動態(tài)規(guī)劃求解
6.6.2 基于組合枚舉求解
6.7 動態(tài)規(guī)劃應(yīng)用小結(jié)
習(xí)題
第7章 貪心算法
7.1 貪心算法概述
7.2 刪數(shù)字問題
7.3 埃及分?jǐn)?shù)式
7.3.1 選擇最小分母構(gòu)建
7.3.2 貪心選擇范圍的擴(kuò)展
7.4 可拆背包問題
7.5 數(shù)列操作與極差
7.5.1 數(shù)列操作
7.5.2 數(shù)列操作優(yōu)化
7.5.3 數(shù)列極差
7.6 哈夫曼樹及其應(yīng)用
7.6.1 哈夫曼樹
7.6.2 哈夫曼編碼
7.7 貪心算法應(yīng)用小結(jié)
習(xí)題
第8章 模擬
8.1 豎式乘除模擬
8.1.1 豎式除模擬
8.1.2 豎式乘模擬
8.2 乘數(shù)探求
8.2.1 積為若干個1構(gòu)成
8.2.2 積為若干個2011構(gòu)成
8.2.3 積的任意指定構(gòu)成
8.3 尾數(shù)前移問題
8.3.1 限1位尾數(shù)前移
8.3.2 多位尾數(shù)前移
8.4 階乘冪與排列組合數(shù)的計算
8.5 圓周率π的高精度計算
8.6 蒙特卡羅模擬計算
8.7 模擬發(fā)橋牌
8.8 泊松分酒
8.9 模擬應(yīng)用小結(jié)
習(xí)題
第9章 算法的綜合應(yīng)用
9.1 最大子段和問題
9.1.1 序列的最大子段和
9.1.2 環(huán)序列的最大子段和
9.2 高斯皇后問題
9.2.1 高斯八皇后問題
9.2.2 n皇后問題
9.2.3 皇后全控棋盤問題
9.3 馬步遍歷與哈密頓圈
9.3.1 馬步遍歷
9.3.2 馬步型哈密頓圈
9.3.3 組合型哈密頓圈
9.4 算法的綜合應(yīng)用小結(jié)
習(xí)題
附錄
附錄a 部分習(xí)題求解提要
附錄b 在vc++6.0環(huán)境下運行c程序方法簡介
附錄c c常用庫函數(shù)
參考文獻(xiàn)
章節(jié)摘錄
版權(quán)頁:插圖:從以上兩個例中可見,在求解案例時,需根據(jù)問題的具體實際設(shè)置數(shù)據(jù)結(jié)構(gòu),確定求解算法,編程實現(xiàn)算法。要提高程序的質(zhì)量,提高編程效率,主要是使設(shè)計的算法具有良好的可讀性、可靠性、可維護(hù)性以及良好的結(jié)構(gòu)。設(shè)計好的算法,編制好的程序,應(yīng)當(dāng)是每位程序設(shè)計工作者追求的目標(biāo)。而要做到這一點,就必須掌握正確的程序設(shè)計方法與技術(shù)。實際上,算法設(shè)計與程序設(shè)計是相關(guān)聯(lián)的一個整體。為了防止在算法教學(xué)中算法設(shè)計與程序設(shè)計脫節(jié),算法理論與實際應(yīng)用脫節(jié),本教程在講述每一種常用算法時,把算法設(shè)計與程序設(shè)計緊密結(jié)合起來,突出算法在解決實際案例中的核心地位與指導(dǎo)作用,努力提高對相應(yīng)算法的理解,切實提高我們應(yīng)用算法設(shè)計解決實際問題的能力。1.3.2 結(jié)構(gòu)化程序設(shè)計近年來,一些面向?qū)ο蟮挠嬎銠C程序設(shè)計語言陸續(xù)問世,打破了以往只有面向過程程序設(shè)計的單一局面。如果認(rèn)為有了面向?qū)ο蟮某绦蛟O(shè)計之后,面向過程的程序設(shè)計就過時了,這是不正確的。不應(yīng)該把面向?qū)ο笈c面向過程對立起來,在面向?qū)ο蟪绦蛟O(shè)計中仍然要用到面向過程的知識。面向過程程序設(shè)計仍然是程序設(shè)計工作者的基本功。而面向過程程序設(shè)計通常由結(jié)構(gòu)化程序設(shè)計實現(xiàn)。算法是由一系列操作組成的,這些操作之間的執(zhí)行次序就是控制結(jié)構(gòu)。計算機科學(xué)家Bohm和Jacopini證明了這樣的事實:任何簡單或復(fù)雜的算法都可以由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這三種基本結(jié)構(gòu)組合而成。所以,順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)被稱為程序設(shè)計的三種基本構(gòu),也是結(jié)構(gòu)化程序設(shè)計必須采用的結(jié)構(gòu)。結(jié)構(gòu)化程序設(shè)計方法是目前國內(nèi)外普遍采用的一種程序設(shè)計方法。自20世紀(jì)60年代由荷蘭學(xué)者E.w.Dijkstra提出后,結(jié)構(gòu)化程序設(shè)計方法在實踐中不斷發(fā)展和完善,已成為軟件開發(fā)的重要方法,在程序設(shè)計中占有十分重要的位置。結(jié)構(gòu)化程序設(shè)計是一種進(jìn)行程序設(shè)計的原則和方法,按照這種原則和方法可設(shè)計出結(jié)構(gòu)清晰、容易理解、容易修改、容易驗證的程序?;蛘哒f,結(jié)構(gòu)化程序設(shè)計是按照一定的原則與原理,組織和編寫正確且易讀的程序的軟件技術(shù)。結(jié)構(gòu)化程序設(shè)計的目標(biāo)在于使程序具有一個合理結(jié)構(gòu),以保證程序的正確性,從而開發(fā)出正確、合理的程序。結(jié)構(gòu)化程序設(shè)計的基本要點為:(1)自頂向下,逐步求精。(2)模塊化設(shè)計。(3)結(jié)構(gòu)化編碼。自頂向下是指對設(shè)計求解的問題要有一個全面的理解,從問題的全局入手,把一個復(fù)雜問題分解成若干個相互獨立的子問題,然后對每個子問題再作進(jìn)一步的分解,如此重復(fù),直到每個子問題都解決為止。
編輯推薦
《計算機常用算法與程序設(shè)計案例教程》:首創(chuàng)“案例”形式實現(xiàn)算法與程序設(shè)計教學(xué)。通過典型案例來引導(dǎo)算法設(shè)計的逐步深入,來展開程序設(shè)計的求解實施,實現(xiàn)以典型案例支撐算法,以算法設(shè)計指導(dǎo)案例求解的良性循環(huán)。注重常用算法的選取與組織。在常用算法的選取上克服貪多求全、貪廣求深,去除一些難度大、理論深、應(yīng)用少的帶學(xué)術(shù)研究性質(zhì)的算法內(nèi)容,結(jié)合本科教學(xué)實際與應(yīng)用需求,選取枚舉、遞推、遞歸、回溯、動態(tài)規(guī)劃、貪心算法與模擬等常用算法。注重典型案例的精選與提煉。針對選取的每一種常用算法,精選典型的實際案例,包括典型的數(shù)值求解,常見的數(shù)據(jù)處理,有趣的智力測試,巧妙的模擬探索,既有引導(dǎo)入門的基礎(chǔ)案例,也有難度較大的綜合案例,既有新創(chuàng)趣題,也有經(jīng)典名題,難度適宜,深入淺出。注重算法設(shè)計與程序?qū)崿F(xiàn)的緊密結(jié)合。在講述每一種常用算法的基本思路與設(shè)計步驟的基礎(chǔ)上,落實到每一個案例求解,從案例的提出到算法設(shè)計與描述、從程序?qū)崿F(xiàn)到案例結(jié)果的討論與分析,環(huán)環(huán)相扣,融為一體,力求理論與實際相結(jié)合、算法與程序相統(tǒng)一,突出算法在解決實際案例中的核心地位與引導(dǎo)作用,切實提高對所學(xué)算法的理解和掌握。注重算法改進(jìn)與程序優(yōu)化。教程對一些典型案例應(yīng)用多種不同的算法設(shè)計,編寫不同表現(xiàn)形式與不同設(shè)計風(fēng)格的程序,體現(xiàn)了算法與程序設(shè)計的靈活性和多樣性。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載