登入帳戶  | 訂單查詢  | 購物車/收銀台( 0 ) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書

『簡體書』数据结构与算法分析——C++语言描述(第四版)(英文版)

書城自編碼: 3048021
分類:簡體書→大陸圖書→教材研究生/本科/专科教材
作者: [美]Mark Allen Weiss[马克 ? 艾伦 ?
國際書號(ISBN): 9787121323164
出版社: 电子工业出版社
出版日期: 2017-08-01
版次: 1
頁數/字數: 656/
書度/開本: 16开 釘裝: 平塑

售價:HK$ 158.1

我要買

 

** 我創建的書架 **
未登入.


新書推薦:
目的行为论导论——刑法体系的新图景(增补第4版·中文增订版)(当代世界学术名著)
《 目的行为论导论——刑法体系的新图景(增补第4版·中文增订版)(当代世界学术名著) 》

售價:HK$ 81.6
浮沉:里亚布申斯基家族兴衰史
《 浮沉:里亚布申斯基家族兴衰史 》

售價:HK$ 117.6
Android自动化测试实战:Python+Appium +unittest
《 Android自动化测试实战:Python+Appium +unittest 》

售價:HK$ 107.8
郭建龙亚洲三部曲:印度、穿越蒙古国、三千佛塔
《 郭建龙亚洲三部曲:印度、穿越蒙古国、三千佛塔 》

售價:HK$ 279.6
工作:从平凡到非凡(原书第5版)  [英]理查德·泰普勒 陶尚芸 译
《 工作:从平凡到非凡(原书第5版) [英]理查德·泰普勒 陶尚芸 译 》

售價:HK$ 70.8
带献帝去旅行--历史书写的中古风景(论衡系列)
《 带献帝去旅行--历史书写的中古风景(论衡系列) 》

售價:HK$ 69.6
出行创新设计:概念、范式与案例
《 出行创新设计:概念、范式与案例 》

售價:HK$ 119.9
爱的能力:为什么我们既渴望爱,又害怕走进爱(第13版)
《 爱的能力:为什么我们既渴望爱,又害怕走进爱(第13版) 》

售價:HK$ 83.8

 

編輯推薦:
本版特色如下:
*书中的阐述和算法均用C新标准C11的代码实现。
*unordered_map两个类模板的简要讨论。
*增加了基数排序和与选择相关问题下界的证明。增加了对AVL树删除算法的实现。使用新的unionfind分析同时改进此前各版的较弱的OMlog*N界。
內容簡介:
本书是数据结构和算法分析的经典教材,书中使用主流的程序设计语言C++作为具体的实现语言。书中内容包括表、栈、队列、树、散列表、优先队列、排序、不相交集算法、图论算法、算法分析、算法设计、摊还分析、查找树算法、后缀数组、后缀树、k-d树和配对堆等。本书把算法分析与C++程序的开发有机地结合起来,深入分析每种算法,内容全面、缜密严格,并细致讲解精心构造程序的方法。
關於作者:
Mark Allen Weiss,佛罗里达国际大学计算与信息科学学院教授、副院长,本科教育主任和研究生教育主任。他于1987年获得普林斯顿大学计算机科学博士学位,师从Bob Sedgewick。他曾经担任全美APAdvanced Placement考试计算机学科委员会的主席2000-2004。Weiss教授在数据结构和算法分析方面卓有建树,他的数据结构和算法分析的著作尤其畅销,并受到广泛好评.已被世界500余所大学用作教材。
Mark Allen Weiss,佛罗里达国际大学计算与信息科学学院教授、副院长,本科教育主任和研究生教育主任。他于1987年获得普林斯顿大学计算机科学博士学位,师从Bob Sedgewick。他曾经担任全美APAdvanced Placement考试计算机学科委员会的主席2000-2004。Weiss教授在数据结构和算法分析方面卓有建树,他的数据结构和算法分析的著作尤其畅销,并受到广泛好评.已被世界500余所大学用作教材。
目錄
Contents
Chapter 1 Programming: A General Overview 1
1.1 Whats This Book About? 1
1.2 Mathematics Review 2
1.2.1 Exponents 3
1.2.2 Logarithms 3
1.2.3 Series 4
1.2.4 Modular Arithmetic 5
1.2.5 The P Word 6
1.3 A Brief Introduction to Recursion 8
1.4 C Classes 12
1.4.1 Basic class Syntax 12
1.4.2 Extra Constructor Syntax and Accessors 13
1.4.3 Separation of Interface and Implementation 16
1.4.4 vector and string 19
1.5 C Details 21
1.5.1 Pointers 21
1.5.2 Lvalues, Rvalues, and References 23
1.5.3 Parameter Passing 25
1.5.4 Return Passing 27
1.5.5 std::swap and std::move 29
1.5.6 The Big-Five: Destructor, Copy Constructor, Move Constructor, Copy
Assignment operator=, Move Assignment operator= 30
1.5.7 C-style Arrays and Strings 35
1.6 Templates 36
1.6.1 Function Templates 37
1.6.2 Class Templates 38
1.6.3 Object, Comparable, and an Example 39
1.6.4 Function Objects 41
1.6.5 Separate Compilation of Class Templates 44
1.7 Using Matrices 44
1.7.1 The Data Members, Constructor, and Basic Accessors 44
1.7.2 operator[] 45
1.7.3 Big-Five 46
Summary 46
Exercises 46
References 48
Chapter 2 Algorithm Analysis 51
2.1 Mathematical Background 51
2.2 Model 54
2.3 What to Analyze 54
2.4 Running-Time Calculations 57
2.4.1 A Simple Example 58
2.4.2 General Rules 58
2.4.3 Solutions for the Maximum Subsequence
Sum Problem 60
2.4.4 Logarithms in the Running Time 66
2.4.5 Limitations of Worst-Case Analysis 70
Summary 70
Exercises 71
References 76
Chapter 3 Lists, Stacks, and Queues 77
3.1 Abstract Data Types ADTs 77
3.2 The List ADT 78
3.2.1 Simple Array Implementation of Lists 78
3.2.2 Simple Linked Lists 79
3.3 vector and list in the STL 80
3.3.1 Iterators 82
3.3.2 Example: Using erase on a List 83
3.3.3 const_iterators 84
3.4 Implementation of vector 86
3.5 Implementation of list 91
3.6 The Stack ADT 103
3.6.1 Stack Model 103
3.6.2 Implementation of Stacks 104
3.6.3 Applications 104
3.7 The Queue ADT 112
3.7.1 Queue Model 113
3.7.2 Array Implementation of Queues 113
3.7.3 Applications of Queues 115
Summary 116
Exercises 116
Chapter 4 Trees 121
4.1 Preliminaries 121
4.1.1 Implementation of Trees 122
4.1.2 Tree Traversals with an Application 123
4.2 Binary Trees 126
4.2.1 Implementation 128
4.2.2 An Example: Expression Trees 128
4.3 The Search Tree ADT?aBinary Search Trees 132
4.3.1 contains 134
4.3.2 findMin and findMax 135
4.3.3 insert 136
4.3.4 remove 139
4.3.5 Destructor and Copy Constructor 141
4.3.6 Average-Case Analysis 141
4.4 AVL Trees 144
4.4.1 Single Rotation 147
4.4.2 Double Rotation 149
4.5 Splay Trees 158
4.5.1 A Simple Idea That Does Not Work 158
4.5.2 Splaying 160
4.6 Tree Traversals Revisited 166
4.7 B-Trees 168
4.8 Sets and Maps in the Standard Library 173
4.8.1 Sets 173
4.8.2 Maps 174
4.8.3 Implementation of set and map 175
4.8.4 An Example That Uses Several Maps 176
Summary 181
Exercises 182
References 189
Chapter 5 Hashing 193
5.1 General Idea 193
5.2 Hash Function 194
5.3 Separate Chaining 196
5.4 Hash Tables without Linked Lists 201
5.4.1 Linear Probing 201
5.4.2 Quadratic Probing 202
5.4.3 Double Hashing 207
5.5 Rehashing 208
5.6 Hash Tables in the Standard Library 210
5.7 Hash Tables with Worst-Case O1 Access 212
5.7.1 Perfect Hashing 213
5.7.2 Cuckoo Hashing 215
5.7.3 Hopscotch Hashing 227
5.8 Universal Hashing 230
5.9 Extendible Hashing 233
Summary 236
Exercises 237
References 241
Chapter 6 Priority Queues Heaps 245
6.1 Model 245
6.2 Simple Implementations 246
6.3 Binary Heap 247
6.3.1 Structure Property 247
6.3.2 Heap-Order Property 248
6.3.3 Basic Heap Operations 249
6.3.4 Other Heap Operations 252
6.4 Applications of Priority Queues 257
6.4.1 The Selection Problem 258
6.4.2 Event Simulation 259
6.5 d-Heaps 260
6.6 Leftist Heaps 261
6.6.1 Leftist Heap Property 261
6.6.2 Leftist Heap Operations 262
6.7 Skew Heaps 269
6.8 Binomial Queues 271
6.8.1 Binomial Queue Structure 271
6.8.2 Binomial Queue Operations 271
6.8.3 Implementation of Binomial Queues 276
6.9 Priority Queues in the Standard Library 282
Summary 283
Exercises 283
References 288
Chapter 7 Sorting 291
7.1 Preliminaries 291
7.2 Insertion Sort 292
7.2.1 The Algorithm 292
7.2.2 STL Implementation of Insertion Sort 293
7.2.3 Analysis of Insertion Sort 294
7.3 A Lower Bound for Simple Sorting Algorithms 295
7.4 Shellsort 296
7.4.1 Worst-Case Analysis of Shellsort 297
7.5 Heapsort 300
7.5.1 Analysis of Heapsort 301
7.6 Mergesort 304
7.6.1 Analysis of Mergesort 306
7.7 Quicksort 309
7.7.1 Picking the Pivot 311
7.7.2 Partitioning Strategy 313
7.7.3 Small Arrays 315
7.7.4 Actual Quicksort Routines 315
7.7.5 Analysis of Quicksort 318
7.7.6 A Linear-Expected-Time Algorithm for Selection 321
7.8 A General Lower Bound for Sorting 323
7.8.1 Decision Trees 323
7.9 Decision-Tree Lower Bounds for Selection Problems 325
7.10 Adversary Lower Bounds 328
7.11 Linear-Time Sorts: Bucket Sort and Radix Sort 331
7.12 External Sorting 336
7.12.1 Why We Need New Algorithms 336
7.12.2 Model for External Sorting 336
7.12.3 The Simple Algorithm 337
7.12.4 Multiway Merge 338
7.12.5 Polyphase Merge 339
7.12.6 Replacement Selection 340
Summary 341
Exercises 341
References 347
Chapter 8 The Disjoint Sets Class 351
8.1 Equivalence Relations 351
8.2 The Dynamic Equivalence Problem 352
8.3 Basic Data Structure 353
8.4 Smart Union Algorithms 357
8.5 Path Compression 360
8.6 Worst Case for Union-by-Rank and Path Compression 361
8.6.1 Slowly Growing Functions 362
8.6.2 An Analysis by Recursive Decomposition 362
8.6.3 An O M log *N Bound 369
8.6.4 An O M |M, N Bound 370
8.7 An Application 372
Summary 374
Exercises 375
References 376
Chapter 9 Graph Algorithms 379
9.1 Definitions 379
9.1.1 Representation of Graphs 380
9.2 Topological Sort 382
9.3 Shortest-Path Algorithms 386
9.3.1 Unweighted Shortest Paths 387
9.3.2 Dijkstras Algorithm 391
9.3.3 Graphs with Negative Edge Costs 400
9.3.4 Acyclic Graphs 400
9.3.5 All-Pairs Shortest Path 404
9.3.6 Shortest Path Example 404
9.4 Network Flow Problems 406
9.4.1 A Simple Maximum-Flow Algorithm 408
9.5 Minimum Spanning Tree 413
9.5.1 Prims Algorithm 414
9.5.2 Kruskals Algorithm 417
9.6 Applications of Depth-First Search 419
9.6.1 Undirected Graphs 420
9.6.2 Biconnectivity 421
9.6.3 Euler Circuits 425
9.6.4 Directed Graphs 429
9.6.5 Finding Strong Components 431
9.7 Introduction to NP-Completeness 432
9.7.1 Easy vs. Hard 433
9.7.2 The Class NP 434
9.7.3 NP-Complete Problems 434
Summary 437
Exercises 437
References 445
Chapter 10 Algorithm Design Techniques 449
10.1 Greedy Algorithms 449
10.1.1 A Simple Scheduling Problem 450
10.1.2 Huffman Codes 453
10.1.3 Approximate Bin Packing 459
10.2 Divide and Conquer 467
10.2.1 Running Time of Divide-and-Conquer Algorithms 468
10.2.2 Closest-Points Problem 470
10.2.3 The Selection Problem 475
10.2.4 Theoretical Improvements for Arithmetic Problems 478
10.3 Dynamic Programming 482
10.3.1 Using a Table Instead of Recursion 483
10.3.2 Ordering Matrix Multiplications 485
10.3.3 Optimal Binary Search Tree 487
10.3.4 All-Pairs Shortest Path 491
10.4 Randomized Algorithms 494
10.4.1 Random-Number Generators 495
10.4.2 Skip Lists 500
10.4.3 Primality Testing 503
10.5 Backtracking Algorithms 506
10.5.1 The Turnpike Reconstruction Problem 506
10.5.2 Games 511
Summary 518
Exercises 5
內容試閱
前 言
目的目标
本书是《数据结构与算法分析C语言描述》的第四版,论述组织大量数据的方法数据结构,以及算法运行时间的估计算法分析。随着计算机的速度越来越快,对于能够处理大量输入数据的程序需求变得日益急迫。可是,由于在输入量很大时程序的低效率显得非常突出,因此又要求对效率问题给予更加严密的关注。通过在实际编程之前对算法进行分析,学生们可以确定一个特定的解决方案是否可行。例如,在本书中学生可查阅一些特定的问题并看到精心的实现怎样能够把处理大量数据的时间限制从若干个世纪减至不到一秒。因此,若无运行时间的阐释,就不会有算法和数据结构的提出。在某些情况下,对于影响实现的运行时间的一些微小细节都需要认真的探究。
一旦解法被确定,接着就要编写程序。随着计算机功能的日益强大,它们必须解决的问题就变得更加庞大和复杂,这就要求开发更加复杂的程序。本书的目标是同时教授学生良好的程序设计技巧和算法分析能力,使他们开发的程序能够具有最高的效率。
本书适合于高等数据结构课程或是算法分析第一年的研究生课程。学生应该具有中等程度的程序设计知识,包括指针、递归以及面向对象程序设计这样一些内容,此外还要具有一些离散数学的基础。
处理方法
虽然本书的内容大部分都与语言无关,但是,程序设计还是需要使用某种特定的语言。正如书名指出的,我们为本书选择了C。
C已经成为主流系统编程语言。除修复C语言的许多语法漏洞之外,C还提供一些直接结构类和模板来实现作为抽象数据类型的泛型数据结构。
编写本书最困难的部分是决定C所占的篇幅。使用太多C的特性将使本书难以理解,使用太少又会使读者得不到比支持类的C语言教材更多的收获。
我们所采取的做法是以一种基于对象的处理方式展示书中的内容。这样,本书几乎不存在对继承的使用。书中以类模板描述泛型数据结构。一般我们避免深奥的C特性,但是使用了vector类和string类,如今它们已是C标准的一部分。本书以前各版通过把类模板接口从其实现中分离出来已经做到了对类模板的实现。虽然这是有争议的首选方式,但它揭示出编译器使读者难以具体使用代码的一些问题。因此,这一版中联机代码把类模板作为一个独立的单元来介绍,无需接口与实现的分离。第1章提供了用于全书的C特性的综述,并描述了我们对类模板的处理方式。附录A阐述如何能够重写类模板以使用分离式编译。
以C和Java二者描述的数据结构的完全版可在互联网上获得。我们使用类似的编码约定以使得这两种语言间平行的结构表现得更加明显。
第四版最重要的变化概述
本书第四版吸收了大量对错误的修正,书中许多部分经过修订以增加表述的清晰度。此外:
? 第4章包含AVL树删除算法的实现,它是一个常常被读者提出的论题。
? 第5章已被广泛修订和扩展,现已包含两个更新的算法:杜鹃散列和跳房子散列。此外,还添加了论述通用散列的新的一节。对C中引入的unordered_set和unordered_ map两个类模板的简要讨论也是新加的内容。
? 第6章基本没有变化,不过,二叉堆的实现用到了C11版引入的移动操作move operation。
? 现在的第7章增加了基数排序的内容,并添加了新的一节,论述下界的证明。排序的程序用到C11版中引入的移动操作。
? 第8章使用由Seidel和Sharir所作的新的unionfind分析,并证明了OM?M,
N的界以代替前面各版较弱的OM log*N界。
? 第12章添加了论述后缀树和后缀数组的材料,包括Karkkainen和Sanders的后缀数组线性时间构建算法及其实现。删除了讨论确定性跳跃表和AA树的两节。
? 全书所出现的代码均用C11作了更新。值得注意的是,这意味着C11新特性的使用,包括auto关键字、范围for循环、移动构造和赋值,以及统一初始化uniform initialization。
内容提要
第1章包含离散数学和递归的一些复习材料。我相信熟练处置递归唯一的办法是反复不断地研读一些好的用法。因此,除第5章外,递归遍及本书每一章的例子之中。另外,第1章还介绍了一些材料,作为对基本C的回顾,包括在C类设计中对模板和一些重要结构的讨论。
第2章处理算法分析。这一章阐述渐近分析和它的主要弱点。这里提供了许多例子,包括对对数运行时间的深入解释。通过直观地把一些简单递归程序转变成迭代程序而对它们进行分析。介绍了更复杂的分治程序,不过有些分析求解递推关系将推迟到第7章再详细阐述。
第3章包括表、栈和队列。这一章包括对STL中vector类和list类的讨论,其中涉及到迭代器的一些材料,并提供对STL中vector类和list类的重要子集的实现。
第4章讨论树,重点在查找树,包括外部查找树B树。UNIX文件系统和表达式树是作为例子来使用的。本章还介绍了AVL树和伸展树。关于查找树实现细节的更详细的处理放在第12章介绍。树的另外一些内容,如文件压缩和博弈树,推迟至第10章讨论。外部媒体上的数据结构作为几章中的最后论题来考虑。STL中set类和map类的讨论也在本章进行,其中包括一个重要的例子,该例使用3个分离的映射高效地解决一个问题。
第5章讨论散列表,包括诸如分离链接法以及线性探测法和平方探测法这样一些经典算法,此外还有几个新算法,即杜鹃散列和跳房子散列。通用散列也在这里讨论,而对可扩散列的讨论则放在本章末尾进行。
第6章是关于优先队列的。二叉堆也安排在这里,还有些额外的材料论述优先队列某些理论上有趣的实现。斐波那契堆在第11章讨论,配对堆在第12章讨论。
第7章是排序。它是关于编程细节和分析的非常特殊的一章。所有重要的通用排序算法均被讨论并进行了比较。详细分析了4种算法:插入排序,希尔排序,堆排序,以及快速排序。本版新增加了基数排序和一些与选择相关问题的下界证明。外部排序的讨论安排在本章的末尾进行。
第8章讨论不相交集算法并证明其运行时间。这是短小且特殊的一章,如果不讨论Kruskal算法则该章可以跳过。
第9章讲授图论算法。图论算法的趣味性不仅因为它们在实践中经常发生,而且还因为它们的运行时间强烈地依赖于数据结构的恰当使用。实际上,所有标准算法都是和相应的数据结构、伪代码以及运行时间的分析一起介绍的。为把这些问题放在一个适当的上下文环境下,本章对复杂性理论包括NP完全性和不可判定性进行了简要的讨论。
第10章通过考查一些常见问题的求解技巧来讨论算法设计。这一章通过大量实例而得到强化。这里及后面各章使用的伪代码使得学生对一个算法实例的理解不至于被实现的细节所困扰。
第11章处理摊还分析。对来自第4章和第6章的3种数据结构以及本章介绍的斐波那契堆进行了分析。
第12章讨论查找树算法、后缀树和后缀数组、k-d树、配对堆。不同于其他各章,本章为查找树和配对堆提供了完全和审慎的实现。材料的安排使得教师可以把一些内容整合到其他各章的讨论中。例如,第12章中的自顶向下红黑树可以和AVL树第4章的一起讨论。
第1章~第9章为大多数一学期的数据结构课程提供了足够的材料。如果时间允许,那么第10章也可以包括进来。研究生的算法分析课程可以使用第7章~第11章的内容。在第11章所分析的高级数据结构可以容易地在前面各章中查到。第9章中对NP完全性的讨论太过简单,以至于不足以用于这样的一门算法分析课程。读者将会发现,参阅一些论述NP完全性的著述对深化本书内容大有裨益。
练习
在每章末尾提供的练习与正文中讲授内容的顺序相匹配。最后的一些练习是把一章作为一个整体来处理而不是针对特定的某一节来考虑的。难做的练习标以一个星号,更难的练习标注两个星号。
参考文献
参考文献列于每章的最后。一般说来,这些参考文献或者是历史性质的,代表着书中材料的原始来源,或者阐述对正文中给出结果的扩展和改进。有些文献提供一些练习的解法。
补充材料
所有读者均可从网站http:cssupport.pearsoncmg.com上获取下列补充资料:
? 例子程序的源代码
? 勘误表
此外,下列材料只提供给Pearson Instructor Resource Center www.pearsonhighered.comirc上有资格的教师。如欲获取这些资料,可访问IRC或你的Pearson Education销售代表。
? 书中挑选的一些练习的解答
? 本书中的一些图示
? 勘误表
致谢
在该丛书几部著作的准备过程中作者得到了许许多多朋友的帮助,有些人在本书的其他版本中列出。谢谢所有诸位。
如同往常一样,Pearson专家们的努力使得本书的写作过程更加轻松。我愿意借此机会感谢我的编辑Tracy Johnson,以及制作编辑Marilyn Lloyd。贤妻Jill因其所做的每一件工作应该得到我特别的感谢。
最后,我还要感谢广大的读者,他们发送E-mail信息并指出较早各版的错误和矛盾之处。我的网站www.cis.fiu.edu~weiss也将包含更新后C和Java的源代码,一个勘误表,以及到提交问题报告的一个链接。

M.A.W.
Miami,Florida

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 大陸用户 | 海外用户
megBook.com.hk
Copyright © 2013 - 2024 (香港)大書城有限公司  All Rights Reserved.