注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術計算機/網(wǎng)絡軟件與程序設計C/C++及其相關數(shù)據(jù)結構與算法分析:C++版

數(shù)據(jù)結構與算法分析:C++版

數(shù)據(jù)結構與算法分析:C++版

定 價:¥32.00

作 者: (美)Clifford A.Shaffer著;張銘,劉曉丹等譯
出版社: 電子工業(yè)出版社
叢編項: 國外計算機科學教材系列
標 簽: 數(shù)據(jù)結構

ISBN: 9787505376465 出版時間: 2002-06-01 包裝: 平裝
開本: 26cm 頁數(shù): 327 字數(shù):  

內(nèi)容簡介

  本書采用程序員最愛用的面向對象C++語言來描述數(shù)據(jù)結構和算法,并把數(shù)據(jù)結構原理和算法分析技術有機地結合在一起,系統(tǒng)介紹了各種類型的數(shù)據(jù)結構和排序、檢索的各種方法。作者非常注意對每一種數(shù)據(jù)結構不同存儲方法及有關算法進行分析比較。書中還引入了一些比較高級的數(shù)據(jù)結構與先進的算法分析技術,并介紹了可計算性理論的一般知識。本版的重要改進在于引入了參數(shù)化的模板,從而提高了算法中數(shù)據(jù)類型的通用性,支持高效的代碼重用。本書概念清楚、邏輯性強、內(nèi)容新穎,可作為大專院校計算機軟件專業(yè)與計算機應用專業(yè)學生的教材和參考書,也可供計算機工程技術人員參考。譯者序數(shù)據(jù)結構與算法分析是一門計算機專業(yè)十分重要的基礎課,計算機科學各領域及各種應用軟件都要使用相關的數(shù)據(jù)結構和算法。當面臨一個新的設計問題時,設計者需要選擇適當?shù)臄?shù)據(jù)結構,并設計出滿足一定?奔浜涂占湎拗頻撓行惴?。本书作者把数据结官復算法分析又x厝嗪顯諞槐窘灘鬧校兄詼琳吒菸侍獾男災恃≡窈俠淼氖萁峁?,并对时间空间竻灿性进行必要的控制。??本書采用當前流行的面向對象的C++語言來描述數(shù)據(jù)結構和算法,因為C++語言是程序員最廣泛使用的語言。因此,程序員可以把本書中的許多?惴ㄖ苯佑τ糜誚吹氖導氏钅恐?。尽??數(shù)據(jù)結構和算法在設計本質上還是很底層的東西,并不像軟件工程大型項目設計那樣,對面向對象方法具有直接的依賴性,因此有人會認為并不需要采用面向對象的高級技術來描述底層的算法,但是采用C++語言能夠更好地體現(xiàn)抽象數(shù)據(jù)類型的概念,從而更本質地描述數(shù)據(jù)結構和算法。為了使本書清晰易懂,作者有意回避了C++的某些重要特性。這個版本的重要改進是引入了參數(shù)化的模板,從而提高了算法中數(shù)據(jù)類型的通用性,支持高效的代碼重用。本書包括四大部分內(nèi)容,第一部分是準備工作,介紹了一些基本概念和術語,以及基本的數(shù)學知識。第二部分介紹了最基本的數(shù)據(jù)結構,依次為線性表(包括棧和隊列)、二叉樹和樹。對每種數(shù)據(jù)結構的講解都從其數(shù)學特性入手,先介紹抽象數(shù)據(jù)類型,然后再討論不同的存儲方法,并且研究不同存儲方法的可能算法。值得贊賞的是,作者結合算法分析來討論各種存儲方法和算法的利弊,摒棄那些不適宜的方法,這樣就調動了讀者思維,使其可從中學到考慮問題的方法。這種“授人以漁”的策略使讀者在今后設計和應用數(shù)據(jù)結構時能夠全面地考慮各種因素,并選擇最佳方案。作為最常用的算法,排序和檢索歷來是數(shù)據(jù)結構討論的重點問題。這在第三部分的第9章和第10章中進行了詳盡的討論。排序算法最能體現(xiàn)算法分析的魅力,它的算法速度要求非常高:其中內(nèi)排序主要考慮的是怎樣減少關鍵碼之間的比較次數(shù)和記錄交換次數(shù),以提高排序速度;而外排序則考慮外存的特性,盡量減少訪問操作,以提高排序速度。第8章證明了所有基于比較的排序算法的時間代價是Θ(nlogn),這也是排序問題的時間代價。檢索則考慮怎樣提高檢索速度,這往往與存儲方法有關。書中介紹了幾種高效的數(shù)據(jù)結構,如自組織線性表、散列表、B樹和B+樹等,都具有極好的檢索性能。第四部分介紹了數(shù)據(jù)結構的應用與一些高級主題,其中包括圖、跳躍表、廣義表和稀疏矩陣等更復雜的線性表結構、還包括Trie結構、AVL樹等復雜樹結構,以及kd樹、PR四分樹等空間數(shù)據(jù)結構。另外,第四部分還簡單介紹了求和、遞歸關系分析和均攤分析等高級算法分析技術,這些技術對于提高程序員的算法分析能力具有重要作用。本書的前言及第1章至第7章由張銘翻譯,第8章至第15章由劉曉丹翻譯。另外,肖毅、柴雯、肖之屏、劉NFB35、趙培翔、李麗、王蜀安、張海東、劉振飛和李健等人也參加了本書的翻譯工作,在此對他們的辛勤勞動表示感謝。由于水平有限,難免有不妥之處,歡迎批評指正。前言我們研究數(shù)據(jù)結構的目的是為了學會編寫更高效的程序。既然現(xiàn)在的計算機速度一年比一年快,為什么還會需要高效率的程序呢?這是由于人類解決問題的雄心與能力是同步增長的。現(xiàn)代計算技術在計算能力和存儲容量上的革命,僅僅提供了計算更復雜問題的有效工具,而程序的高效性要求永遠也不會過時。程序高效性的要求不會,也不應該與合理的設計和簡明清晰的編碼相矛盾。高效程序的設計基于良好的信息組織和優(yōu)秀的算法,而不是基于“編程小伎倆”。如果一個程序員沒有掌握程序設計簡明清晰的基本原理,就不可能編寫出有效的程序。反過來講,簡潔的程序需要合理的數(shù)據(jù)組織和清晰的算法。大多數(shù)計算機科學系的課程設置都已意識到,要培養(yǎng)良好的程序設計技能,首先應該強調基本的軟件工程原理。因此,一旦程序員學會了程序設計和實現(xiàn)簡明清晰的原理,下一步就應該學習有效的數(shù)據(jù)組織和算法,以提高程序的效率。途徑本書描述了許多用于表示數(shù)據(jù)的技術。這些技術體現(xiàn)在以下的原則中:1.〖ZK(#〗每一種數(shù)據(jù)結構和每一個算法都有其時間、空間的代價和效率。當面臨一個新的設計問題時,設計者要透徹地掌握權衡時間、空間代價和算法有效性的方法,以適應問題的需要。這就要懂得算法分析的原理,而且還需要了解所使用的物理介質的特性(例如,數(shù)據(jù)存儲在磁盤上與存儲在主存中時,就有不同的考慮)。2.與代價和效率有關的是時空權衡。例如,人們通常增加空間代價來減少運行時間,反之亦然。程序員所面對的時空權衡問題普遍存在于軟件設計和實現(xiàn)的各個階段,因此必須把這個概念牢記在心。3.程序員應該充分了解一些現(xiàn)成的方法,以免進行不必要的重復開發(fā)工作。因此,學生們需要了解經(jīng)常使用的數(shù)據(jù)結構和相關算法。4.數(shù)據(jù)結構服從于應用需求。學生們必須把分析應用需求放在第一位,然后再尋找一種與實際應用相匹配的數(shù)據(jù)結構。要做到這一點,需要應用上述三條原則?!糧K)〗教學建議數(shù)據(jù)結構和算法設計的書籍往往囿于下面兩種情形之一〖BFQ〗:〖BF〗一種是教材,一種是百科全書。有些書籍試圖融合這兩種編排,但通常是二者都沒有組織好,而本書是作為教材來編寫的。我相信了解那些用于選擇或設計可解決問題的數(shù)據(jù)結構的基本原理十分重要,會比死記硬背書本內(nèi)容重要得多。因此,本書中涵蓋了大多數(shù)(但不是所有的)標準數(shù)據(jù)結構。為了闡述一些重要原理,也包括了某些并非廣泛使用的數(shù)據(jù)結構。?磽?,本蕶┲x菇檣芰?一些相對較新但即將得到廣泛應用的數(shù)據(jù)結構。本書可作為本科生一個學期的教學內(nèi)容,也可作為專業(yè)技術人員的自學教材。讀者應該具備編程經(jīng)驗,最好學過相當于兩個學期的結構化程序設計語言(如Pascal或C語言),并且最好懂得一些C++的基本知識。早已熟悉遞歸的讀者具有一定的?攀啤O刃尥暌幻藕?的離散數(shù)學課程對于數(shù)據(jù)結構的學習也大有裨益。第2章中給出了一些理解本書所必備的數(shù)學預備知識。讀者遇到不熟悉的數(shù)學問題時,可以查閱這一章中的相關內(nèi)容。盡管本書應該一個學期完成,但書中超過了一個學期的內(nèi)容,這樣就可以為教師提供一些選擇的余地。二年級學生的基本數(shù)據(jù)結構和算法分析背景不太多,可以給他們詳細地講解第1~12章的內(nèi)容,再從第13章中選擇一些專題來講解,我就是這樣來給二年級學生講課的。背景知識更豐富的學生,可以先讀第1章,跳過第2章中除“深入學習導讀”之外的內(nèi)容,簡要地瀏覽第3章和第4章(請著重閱讀4.1.3小節(jié)和4.2小節(jié)),然后詳細閱讀其余的章節(jié)。另外,教師可以根據(jù)程序設計實習的需要,選擇第13章中的某些專題內(nèi)容。第13章是針對進行較大的程序設計練習而編寫的。我建議所有選修數(shù)據(jù)結構的學生,都應該做一些高級樹結構或其他較復雜的動態(tài)數(shù)據(jù)結構的上機實習,如第12章中的跳躍表或稀疏矩陣。所有這些數(shù)據(jù)結構都沒有二叉檢索樹難,學完第5章的學生都有能力來實現(xiàn)它們。本書盡量合理地安排內(nèi)容順序。教師可以根據(jù)需要自由地重新組織內(nèi)容。讀者掌握了第1至第6章后,以下的內(nèi)容就相對獨立了。顯然,外排序依賴于內(nèi)排序和磁盤文件系統(tǒng)。Kruskal最小支撐樹算法使用了6.2小節(jié)關于UNION/FIND的算法。9.2小節(jié)的自組織線性表談到了8.3小節(jié)討論的緩沖區(qū)置換技術。第14章的討論基于本書的例題。15.2小節(jié)依賴于圖論知識。一般情況下,大多數(shù)主題都只依賴于同一章中討論過的內(nèi)容。關于C++本書中所有示例程序都是用C++來編寫的,但也并不想難倒那些對C++不熟悉的讀者。在努力保持C++優(yōu)點的同時,我盡量使示例程序簡明、清晰。C++在本書中只是作為闡釋數(shù)據(jù)結構的工具,而且實際上只用了C++的一個小子集。特別是書中用到了C++隱蔽實現(xiàn)細節(jié)的特性,如類(class)、私有成員(privateclassmember)、構造函數(shù)(constructor)、析構函數(shù)(destructor)。這些特性支持著一個關鍵的概念,即體現(xiàn)于抽象數(shù)據(jù)類型(abstractdatatype)中的邏輯設計與體現(xiàn)于數(shù)據(jù)結構中的物理實現(xiàn)的分離。為了使本書清晰易懂,我完全回避了C++的某些重要特性,并有意排除或盡量少用一些經(jīng)驗豐富的C++程序員常用的特性,如類的層次(classhierarchy)、繼承(inheritance)和虛函數(shù)(virtualfunction)。運算符和函數(shù)的重載(overloading)也很少使用。C的原始語義比C++所提供的一些類似功能要好一些。當然,上述C++的特性在實際程序中是合理的設計基礎,但是它們只能掩蓋而并沒有加強本書中所闡述的原理。例如,類的繼承在避免重復編碼和降低程序錯誤率方面很重要,但是從教育學的標準觀點來看,類的繼承在若干類中分散了數(shù)據(jù)元素的描述,從而使得程序更難理解。因此,在本書中,當類的繼承對闡述觀點有明顯作用時才使用繼承來定義類(例如第531小節(jié))。但這并不意味著程序員都應該遵從類似的原則,避免代碼重復和減少錯誤是很重要的目標,不要把本書中的示例程序直接復制到你自己的程序中,只把它們看做是對數(shù)據(jù)結構原理的闡釋即可。我需要做出的最痛苦的選擇是:在示例代碼中是否使用模板(t

作者簡介

暫缺《數(shù)據(jù)結構與算法分析:C++版》作者簡介

圖書目錄

目  錄   第一部分 預 備 知 識   第1章 數(shù)據(jù)結構和算法    11  數(shù)據(jù)結構的原則        111 學習數(shù)據(jù)結構的必要性        112 代價與效益    12 抽象數(shù)據(jù)類型和數(shù)據(jù)結構    13 問題、算法和程序    14 深入學習導讀    15 習題      第2章 數(shù)學預備知識    21 集合和關系    22 常用數(shù)學術語    23 對數(shù)    24 遞歸    25 級數(shù)求和與遞歸    26  數(shù)學證明方法        261 反證法        262 數(shù)學歸納法    27 評估    28 深入學習導讀    29 習題      第3章 算法分析    31 概述    32 最佳、最差和平均情況    33 換一臺更快的計算機,還是換一種更快的算法    34  漸近分析        341 上限        342 下限        343 Θ表示法        344 化簡法則    35 程序運行時間的計算    36 問題的分析    37 容易混淆的概念    38 多參數(shù)問題    39 空間代價    310 實際操作中的一些因素    311 深入學習導讀    312 習題    313 項目設計     第二部分 基本數(shù)據(jù)結構   第4章 線性表、棧和隊列    41  線性表        411 順序表的實現(xiàn)        412 鏈表        413 線性表實現(xiàn)方法的比較        414 元素的表示        415 雙鏈表    42 字典ADT    43  棧        431 順序棧        432 鏈式棧        433 順序棧與鏈式棧的比較        434 遞歸的實現(xiàn)    44  隊列        441 順序隊列        442 鏈式隊列        443 順序隊列與鏈式隊列的比較     45 深入學習導讀    46 習題    47 項目設計      第5章 二叉樹    51 定義及主要特性        511 滿二叉樹定理        512 二叉樹的抽象數(shù)據(jù)類型    52 周游二叉樹    53 二叉樹的實現(xiàn)        531 使用指針實現(xiàn)二叉樹        532 空間代價        533 使用數(shù)組實現(xiàn)完全二叉樹    54 二叉查找樹    55 堆與優(yōu)先隊列    56 Huffman編碼樹        561 建立Huffman編碼樹        562 Huffman編碼及其用法    57 深入學習導讀    58 習題    59 項目設計      第6章 樹    61 樹的定義與術語        611 樹結點的ADT        612 樹的周游    62 父指針表示法    63 樹的實現(xiàn)        631 子結點表表示法        632 左子結點/右兄弟結點表示法        633 動態(tài)結點表示法        634 動態(tài)左子結點/右兄弟結點表示法     64 K叉樹    65 樹的順序表示法    66 深入學習導讀    67 習題    68 項目設計     第三部分 排序和檢索   第7章 內(nèi)排序    7.1 排序術語及記號    7.2  三種代價為Θ(n2)的排序方法        7.2.1 插入排序        7.2.2 起泡排序        7.2.3 選擇排序        7.2.4 交換排序算法的時間代價    7.3 Shell排序    7.4 快速排序    7.5 歸并排序    7.6 堆排序    7.7 分配排序和基數(shù)排序    7.8 對各種排序算法的實驗比較    7.9 排序問題的下限    7.10 深入學習導讀    7.11 習題    7.12 項目設計      第8章 文件管理和外排序    8.1 主存儲器和輔助存儲器    8.2 磁盤        8.2.1 磁盤結構        8.2.2 磁盤訪問代價    8.3 緩沖區(qū)和緩沖池    8.4 程序員的文件視圖    8.5 外部排序    8.6 外部排序的簡單方法    8.7 置換選擇排序    8.8 多路歸并    8.9 深入學習導讀    8.10 習題    8.11 項目設計      第9章 檢索    9.1 檢索已排序的數(shù)組    9.2 自組織線性表    9.3 集合的檢索    9.4  散列方法        9.4.1 散列函數(shù)        9.4.2 開散列方法        9.4.3 閉散列方法    9.5 深入學習導閱讀    9.6 習題    9.7 項目設計      第10章 索引技術    10.1 線性索引    10.2 ISAM    10.3 樹形索引    10.4 23樹    10.5 B樹        10.5.1 B+樹        10.5.2 B樹分析    10.6 深入學習導讀    10.7 習題    10.8 項目設計  
   第四部分 應用與高級話題   第11章 圖    11.1 術語和表示法    11.2 圖的實現(xiàn)    11.3  圖的周游       11.3.1 深度優(yōu)先搜索       11.3.2 廣度優(yōu)先搜索       11.3.3 拓撲排序    11.4 最短路徑問題        11.4.1 單源最短路徑        11.4.2 每對頂點間的最短路徑    11.5 最小支撐樹        11.5.1 Prim算法        11.5.2 Kruskal算法    11.6 深入學習導讀    11.7  習題    11.8 項目設計      第12章 線性表和數(shù)組高級技術    12.1 跳躍表    12.2 廣義表    12.3 矩陣的表示方法    12.4  存儲管理        12.4.1 動態(tài)存儲分配        12.4.2 失敗處理策略和無用單元收集     12.5 深入學習導讀    12.6 習題    12.7 項目設計      第13章 高級樹形結構    13.1 Trie結構    13.2 平衡樹        13.2.1 AVL樹        13.2.2 伸展樹    13.3 空間數(shù)據(jù)結構        13.3.1 kd樹        13.3.2 PR四分樹        13.3.3 其他空間數(shù)據(jù)結構    13.4 深入學習導讀    13.5 習題    13.6 項目設計      第14章 分析技術    14.1 求和技術    14.2 遞歸關系        14.2.1 估計上下限        14.2.2 擴展遞歸        14.2.3 分治法遞歸        14.2.4 快速排序平均情況分析    14.3 均攤分析    14.4 深入學習導讀    14.5 習題    14.6 項目設計      第15章 計算的限制    15.1 歸約    15.2 難解問題        15.2.1 NP完全性        15.2.2 繞過NP完全性問題    15.3 不可解問題        15.3.1 不可數(shù)性        15.3.2 停機問題的不可解性        15.3.3 確定程序行為是不可解的    15.4 深入學習導讀    15.5 習題    15.6 項目設計  
   附錄A 實用函數(shù)      參考文獻

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號