本書涉及計(jì)算機(jī)軟件基礎(chǔ)與應(yīng)用中的主要知識(shí)、技術(shù)和方法,既包含了數(shù)據(jù)結(jié)構(gòu)的基本知識(shí),又包含了數(shù)值方法的內(nèi)容。具體內(nèi)容有集合、數(shù)據(jù)結(jié)構(gòu)與算法的基本概念,線性數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)與運(yùn)算,非線性數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)與運(yùn)算,查找與排序技術(shù),矩陣與線性方程組,插值與逼近,各種數(shù)值問(wèn)題的近似解法,數(shù)值問(wèn)題的連分式解法。
作者長(zhǎng)期從事數(shù)值方法與數(shù)據(jù)結(jié)構(gòu)方面的教學(xué)工作,講授的主要內(nèi)容是數(shù)值計(jì)算與非數(shù)值計(jì)算的問(wèn)題,同時(shí)也編寫了有關(guān)的教材。這兩方面的知識(shí)內(nèi)容都可以也應(yīng)該歸屬于計(jì)算機(jī)軟件的基礎(chǔ)與應(yīng)用領(lǐng)域。隨著教學(xué)改革的深入,從學(xué)生計(jì)算機(jī)知識(shí)的結(jié)構(gòu)以及實(shí)際應(yīng)用考慮,在計(jì)算機(jī)課程的教學(xué)中嘗試將這兩方面的知識(shí)內(nèi)容作為有機(jī)的整體設(shè)置成一門課程,即數(shù)據(jù)與算法。這也是一門計(jì)算機(jī)軟件基礎(chǔ)與應(yīng)用的重要課程。
實(shí)際上,不管是離散數(shù)據(jù)還是數(shù)值型數(shù)據(jù),都屬于數(shù)據(jù),其不同點(diǎn)只在于二者的背景以及使用的領(lǐng)域有所不同,在計(jì)算機(jī)中存儲(chǔ)的方式有所不同,對(duì)它們的處理方法也有所不同,但它們確實(shí)是人們認(rèn)識(shí)事物的同一類對(duì)象。另一方面,現(xiàn)代科學(xué)技術(shù)發(fā)展到現(xiàn)在,特別是計(jì)算機(jī)技術(shù)的飛速發(fā)展,不論是數(shù)值計(jì)算還是非數(shù)值計(jì)算都以計(jì)算機(jī)作為工具,大量的數(shù)據(jù)處理與復(fù)雜的數(shù)值計(jì)算都需要算法的支持。因此,不論是數(shù)值型數(shù)據(jù)還是非數(shù)值型數(shù)據(jù),它們都應(yīng)該作為計(jì)算機(jī)處理的對(duì)象與算法一起考慮,而算法不僅是離散數(shù)據(jù)運(yùn)算的基礎(chǔ),也是數(shù)值計(jì)算的基礎(chǔ)。數(shù)據(jù)與算法是一個(gè)整體,應(yīng)該作為計(jì)算機(jī)教學(xué)中的一門重要課程。
數(shù)值方法與數(shù)據(jù)結(jié)構(gòu)原來(lái)是兩門不同的課程,前者屬于數(shù)學(xué)范疇,后者屬于計(jì)算機(jī)軟件基礎(chǔ)的范疇。這兩個(gè)原本屬于不同范疇的課程內(nèi)容如何合并在一起?作者認(rèn)為,既然是不同類型的數(shù)據(jù),又采用了不同的運(yùn)算方式,就應(yīng)該以數(shù)據(jù)類型為基礎(chǔ),以“數(shù)據(jù)+算法”與“問(wèn)題+算法”的方式展開。這樣,就不會(huì)覺得原本屬于數(shù)據(jù)結(jié)構(gòu)的內(nèi)容與原本屬于數(shù)值方法的內(nèi)容被混雜在一起了。
作為一門新的課程,單純考慮內(nèi)容的有機(jī)結(jié)合是不夠的,更重要的是要?jiǎng)?chuàng)新、精簡(jiǎn)、實(shí)用,體現(xiàn)改革與發(fā)展。在數(shù)值方法中,求解一個(gè)非線性方程(即方程求根)有很多經(jīng)典方法,數(shù)值積分也有很多經(jīng)典方法。一般來(lái)說(shuō),求解一類數(shù)值問(wèn)題,往往有很多經(jīng)典方法。在作者看來(lái),絕大部分學(xué)生學(xué)習(xí)數(shù)值方法,并不是為了了解各種求解方法,而是為了解決實(shí)際問(wèn)題,因此,不需要介紹所有的求解方法,◆數(shù)據(jù)與算法只要介紹一種行之有效的方法就行了。作者在長(zhǎng)期的教學(xué)過(guò)程中,對(duì)連分式方法進(jìn)行了一定的研究,認(rèn)為利用連分式方法解決數(shù)值計(jì)算問(wèn)題,具有精確、計(jì)算復(fù)雜度低、簡(jiǎn)單實(shí)用等優(yōu)點(diǎn)。因此,在編寫本書時(shí)就強(qiáng)調(diào)了這種方法。對(duì)于數(shù)值計(jì)算的問(wèn)題,不是介紹解決這類問(wèn)題的所有方法,而是只介紹解決這類問(wèn)題的一個(gè)基本方法,然后利用連分式的特點(diǎn)對(duì)這個(gè)基本方法進(jìn)行校正,以求對(duì)不同性態(tài)的問(wèn)題都能得到精確的結(jié)果。
本書內(nèi)容豐富、通俗易懂、實(shí)用性強(qiáng),既包含了數(shù)據(jù)結(jié)構(gòu)的基本知識(shí),又包含了數(shù)值方法的主要內(nèi)容。書中所有算法均用C++語(yǔ)言描述,這些算法程序均在Visual C++ 6.0環(huán)境下調(diào)試通過(guò)。本書可作為高等學(xué)校本科生或研究生相關(guān)課程的教材,也可作為廣大從事計(jì)算機(jī)應(yīng)用工作的科技人員的參考書。
如果讀者還需要更多的算法,則可以將參考文獻(xiàn)中的[1\]作為與本書配套的工具書,在那本書中給出了解決各種問(wèn)題的多種算法。
由于作者水平有限,書中難免有錯(cuò)誤或不妥之處,懇請(qǐng)讀者批評(píng)指正。
作者
第1章 預(yù)備知識(shí)
1.1 集合
1.1.1 集合及其基本運(yùn)算
1.1.2 自然數(shù)集與數(shù)學(xué)歸納法
1.1.3 笛卡兒積
1.1.4 二元關(guān)系
1.2 數(shù)據(jù)結(jié)構(gòu)的基本概念
1.2.1 什么是數(shù)據(jù)結(jié)構(gòu)
1.2.2 數(shù)據(jù)結(jié)構(gòu)的圖形表示
1.2.3 線性結(jié)構(gòu)與非線性結(jié)構(gòu)
1.3 算法
1.3.1 算法的基本概念
1.3.2 算法設(shè)計(jì)基本方法
1.3.3 算法的復(fù)雜度分析
習(xí)題
第2章 線性數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)與運(yùn)算
2.1 線性表
2.1.1 線性表及其順序存儲(chǔ)
2.1.2 棧
2.1.3 隊(duì)列與循環(huán)隊(duì)列
2.2 線性鏈表
2.2.1 線性鏈表的基本概念
2.2.2 線性鏈表的插入與刪除
2.2.3 帶鏈的棧與隊(duì)列
2.2.4 循環(huán)鏈表
2.3 多項(xiàng)式的表示與運(yùn)算
2.4 數(shù)組
2.4.1 數(shù)組的順序存儲(chǔ)結(jié)構(gòu)
2.4.2 規(guī)則矩陣的壓縮
2.4.3 一般稀疏矩陣的表示
習(xí)題
第3章 非線性數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)與運(yùn)算
3.1 樹
3.2 二叉樹
3.2.1 二叉樹及其基本性質(zhì)
3.2.2 二叉樹的遍歷
3.2.3 二叉樹的存儲(chǔ)結(jié)構(gòu)
3.2.4 穿線二叉樹
3.2.5 表達(dá)式的線性化
3.3 圖
3.3.1 圖的基本概念
3.3.2 圖的存儲(chǔ)結(jié)構(gòu)
3.3.3 圖的遍歷
3.3.4 最短距離問(wèn)題
3.3.5 圖的鄰接表類
習(xí)題
第4章 查找與排序技術(shù)
4.1 基本的查找技術(shù)
4.1.1 順序查找
4.1.2 有序表的對(duì)分查找
4.1.3 分塊查找
4.2 Hash表技術(shù)
4.3 字符串匹配
4.4 基本的排序技術(shù)
4.4.1 冒泡排序與快速排序
4.4.2 簡(jiǎn)單插入排序與希爾排序
4.4.3 簡(jiǎn)單選擇排序與堆排序
4.4.4 其他排序方法簡(jiǎn)介
4.5 拓?fù)浞诸?br />
4.6 二叉排序樹及其查找
4.6.1 二叉排序樹的基本概念
4.6.2 二叉排序樹的插入
4.6.3 二叉排序樹的刪除
4.6.4 二叉排序樹查找
4.7 多層索引樹及其查找
4.7.1 B-樹
4.7.2 B+樹
習(xí)題
第5章 矩陣與線性方程組
5.1 線性代數(shù)方程組
5.1.1 消去法
5.1.2 迭代法
5.1.3 病態(tài)方程組
5.2 矩陣求逆
5.3 矩陣分解
5.3.1 矩陣的三角分解
5.3.2 矩陣的QR分解
5.4 矩陣特征值
5.4.1 矩陣特征值與特征向量的基本概念
5.4.2 乘冪法
5.4.3 雅可比方法
5.4.4 豪斯霍爾德方法
5.4.5 求一般實(shí)矩陣全部特征值的QR方法
習(xí)題
第6章 插值與逼近
6.1 代數(shù)插值
6.1.1 代數(shù)插值的基本概念
6.1.2 拉格朗日插值公式
6.1.3 艾特肯逐步插值法
6.1.4 牛頓插值公式
6.1.5 樣條插值法
6.2 均方逼近
6.2.1 正交多項(xiàng)式
6.2.2 最佳均方逼近多項(xiàng)式
6.2.3 最小二乘曲線擬合
6.2.4 多變量線性擬合
6.3 一致逼近
6.3.1 一致逼近的基本概念
6.3.2 切比雪夫多項(xiàng)式
6.3.3 最佳一致逼近多項(xiàng)式
6.3.4 列梅茲算法
習(xí)題
第7章 數(shù)值問(wèn)題的近似解法
7.1 數(shù)值積分
7.1.1 牛頓科茲公式
7.1.2 變步長(zhǎng)求積法
7.1.3 龍貝格求積法
7.1.4 高斯求積法
7.2 非線性方程
7.2.1 方程求根的一般過(guò)程
7.2.2 試位法
7.2.3 逐次迭代法
7.2.4 牛頓迭代法與插值法
7.2.5 求多項(xiàng)式方程全部根
7.3 常微分方程初值問(wèn)題
7.3.1 常微分方程初值問(wèn)題數(shù)值解的基本思想
7.3.2 歐拉方法
7.3.3 龍格庫(kù)塔法
7.3.4 一階微分方程組與高階微分方程
7.4 常微分方程邊值問(wèn)題
7.4.1 試射法
7.4.2 有限差分法
習(xí)題
第8章 數(shù)值問(wèn)題的連分式解法
8.1 連分式插值
8.1.1 連分式與函數(shù)連分式
8.1.2 連分式插值法
8.1.3 連分式法求解數(shù)值問(wèn)題的一般步驟
8.2 數(shù)值積分的連分式法
8.3 方程求根的連分式方法
8.4 求解常微分方程初值問(wèn)題的連分式法
8.5 求解常微分方程邊值問(wèn)題的連分式法
習(xí)題
參考文獻(xiàn)