《算法》第4版(Sedgewick)
- 格式:doc
- 大小:54.50 KB
- 文档页数:4
算法第4版第3版区别摘要:1.介绍算法第3版和第4版的区别2.详述第4版的新特性及改进3.对比两版的应用场景和适用范围4.总结第4版对算法学习的价值正文:随着科技的发展,算法这一领域也在不断壮大。
在第3版的基础上,作者推出了第4版算法书籍。
本文将详细介绍算法第3版与第4版的区别,帮助读者更好地了解这两版本的优劣及适用场景。
首先,我们来看第4版的新特性和改进。
作者在第4版中加入了许多新的内容和示例,使得读者能更好地理解和掌握算法原理。
此外,第4版还对一些章节进行了重组和优化,使得整个教材的逻辑更加清晰。
例如,在第4版中,作者将动态规划单独作为一个章节,使其更易于读者学习和理解。
其次,我们来对比一下两版的应用场景和适用范围。
第3版主要针对计算机科学和信息技术专业的学生,以及从事软件开发的人员。
而第4版在保留这些受众的基础上,还拓展到了更广泛的领域,如数据科学、人工智能和机器学习等。
因此,第4版对于更多领域的从业者和学习者都具有较高的实用价值。
最后,我们来总结一下第4版算法书籍对学习的价值。
相较于第3版,第4版在以下几个方面具有明显优势:1.更丰富的案例和练习题,有助于巩固所学知识;2.更系统的讲解,使读者能全面了解算法的原理和应用;3.针对不同层次的读者,第4版教材在难度上有所调整,既适合初学者入门,也满足高手进阶的需求;4.紧跟时代发展,涉及更多实际应用场景,如大数据、人工智能等;5.版式美观,印刷质量高,便于阅读和笔记。
综上所述,算法第4版在内容、结构、适用范围等方面均优于第3版。
对于广大读者来说,尤其是从事计算机科学、数据科学、人工智能等领域的人员,推荐购买和使用第4版算法教材。
学习算法的经典教材推荐在计算机科学领域,算法是一门重要的学科。
学习算法不仅可以提高我们解决问题的能力,还可以培养我们的逻辑思维和分析能力。
因此,选择一本好的算法教材是非常重要的。
在本文中,我将向大家推荐几本经典的算法教材,希望对大家的学习有所帮助。
1.《算法导论》(Introduction to Algorithms)《算法导论》是由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein合著的一本经典教材。
这本书系统地介绍了算法设计和分析的基本原理,包括排序、图算法、动态规划等。
它以清晰的语言和丰富的示例,帮助读者理解算法的核心思想和实现细节。
《算法导论》适合作为算法课程的教材,也适合作为算法学习的参考书。
2.《算法(第4版)》(Algorithms, Part I)《算法(第4版)》是由Robert Sedgewick和Kevin Wayne合著的一本经典教材。
这本书以Java语言为基础,介绍了常见的算法和数据结构,包括排序、查找、图算法等。
它不仅提供了清晰的解释和示例代码,还包含了大量的练习题和编程项目,帮助读者巩固所学知识。
《算法(第4版)》适合初学者入门,也适合有一定算法基础的读者进一步深入学习。
3.《算法设计与分析基础》(Foundations of Algorithm Design and Analysis)《算法设计与分析基础》是由王晓东、王晓燕和李海霞合著的一本经典教材。
这本书以算法设计和分析为核心,介绍了常见的算法思想和技术,包括贪心算法、动态规划、分治算法等。
它注重理论与实践的结合,通过真实的案例和实验分析,帮助读者理解算法的应用场景和效果评估。
《算法设计与分析基础》适合计算机科学专业的学生和从业人员,也适合对算法感兴趣的读者。
4.《算法之美》《算法之美》是由吴军著的一本畅销书。
虽然不是传统的教材,但它以通俗易懂的语言,介绍了算法在现实生活中的应用和影响。
第5章算法与复杂性习题一、选择题1. B2. D3. C4. A5. B6. B7. D8.B9.C 10.A11.A 12.C 13.A 14.A二、简答题1.什么是算法,算法的特性有哪些?答:“算法(Algorithm)是一组明确的、可以执行的步骤的有序集合,它在有限的时间内终止并产生结果”。
算法的特性有:(1) 有穷性(可终止性):一个算法必须在有限个操作步骤内以及合理的有限时间内执行完成。
(2) 确定性:算法中的每一个操作步骤都必须有明确的含义,不允许存在二义性。
(3) 有效性(可执行性):算法中描述的操作步骤都是可执行的,并能最终得到确定的结果。
(4) 输入及输出:一个算法应该有零个或多个输入数据、有1个或多个输出数据。
2.什么是算法的时间复杂度和空间复杂度,如何表示?答:时间复杂度是与求解问题规模、算法输入相关的函数,该函数表示算法运行所花费的时间。
记为,T(n),其中,n代表求解问题的规模。
算法的空间复杂度(Space complexity)度量算法的空间复杂性、即执行算法的程序在计算机中运行所占用空间的大小。
简单讲,空间复杂度也是与求解问题规模、算法输入相关的函数。
记为,S(n),其中,n代表求解问题的规模。
时间复杂度和空间复杂度同样,引入符号“O”来表示T(n)、S(n)与求解问题规模n之间的数量级关系。
3.用图示法表示语言处理的过程。
答:语言处理的过程如图所示:4.简述算法设计的策略。
答:作为实现计算机程序实现时解决问题的方法,算法研究的内容是解决问题的方法,而不是计算机程序的本身。
一个优秀的算法可以运行在比较慢的计算机上,但一个劣质的算法在一台性能很强的计算机上也不一定能满足应用的需要,因此,在计算机程序设计中,算法设计往往处于核心地位。
要想充分理解算法并有效地应用于实际问题,关键是对算法的分析。
通常可以利用实验对比分析、数学方法来分析算法。
实验对比分析很简单,两个算法相互比较,它们都能解决同一问题,在相同环境下,一般就会认为哪个算法的速度快这个算法性能更好。
第1篇一、实验背景与目的随着计算机技术的飞速发展,算法在计算机科学中扮演着至关重要的角色。
为了加深对算法设计与分析的理解,提高实际应用能力,本实验课程设计旨在通过实际操作,让学生掌握算法设计与分析的基本方法,学会运用所学知识解决实际问题。
二、实验内容与步骤本次实验共分为三个部分,分别为排序算法、贪心算法和动态规划算法的设计与实现。
1. 排序算法(1)实验目的:熟悉常见的排序算法,理解其原理,比较其优缺点,并实现至少三种排序算法。
(2)实验内容:- 实现冒泡排序、快速排序和归并排序三种算法。
- 对每种算法进行时间复杂度和空间复杂度的分析。
- 编写测试程序,对算法进行性能测试,比较不同算法的优劣。
(3)实验步骤:- 分析冒泡排序、快速排序和归并排序的原理。
- 编写三种排序算法的代码。
- 分析代码的时间复杂度和空间复杂度。
- 编写测试程序,生成随机测试数据,测试三种算法的性能。
- 比较三种算法的运行时间和内存占用。
2. 贪心算法(1)实验目的:理解贪心算法的基本思想,掌握贪心算法的解题步骤,并实现一个贪心算法问题。
(2)实验内容:- 实现一个贪心算法问题,如活动选择问题。
- 分析贪心算法的正确性,并证明其最优性。
(3)实验步骤:- 分析活动选择问题的贪心策略。
- 编写贪心算法的代码。
- 分析贪心算法的正确性,并证明其最优性。
- 编写测试程序,验证贪心算法的正确性。
3. 动态规划算法(1)实验目的:理解动态规划算法的基本思想,掌握动态规划算法的解题步骤,并实现一个动态规划算法问题。
(2)实验内容:- 实现一个动态规划算法问题,如背包问题。
- 分析动态规划算法的正确性,并证明其最优性。
(3)实验步骤:- 分析背包问题的动态规划策略。
- 编写动态规划算法的代码。
- 分析动态规划算法的正确性,并证明其最优性。
- 编写测试程序,验证动态规划算法的正确性。
三、实验结果与分析1. 排序算法实验结果:- 冒泡排序:时间复杂度O(n^2),空间复杂度O(1)。
主题:pta单链表元素最大值以及结点数一、简介pta是一个上线评测系统,专门用于评测程序设计能力。
在pta中,关于单链表的问题广泛存在,而求单链表中元素最大值以及结点数也是一种常见的问题。
二、绪论单链表是一种常见的数据结构,由一系列结点组成,每个结点包含数据域和指针域。
求单链表中元素的最大值以及结点数是对链表基本操作的考察,也是对算法思维和编程能力的考验。
三、元素最大值的求解1. 遍历法:最简单直接的方法是使用遍历法,从链表的头结点开始,一直遍历到尾部结点,记录下遍历过程中所遇到的最大值,即可得到单链表中元素的最大值。
该方法的时间复杂度为O(n),n为链表的长度。
2. 递归法:另一种方法是使用递归法,递归地比较每个结点的值,并更新最大值。
该方法也能够得到单链表中元素的最大值,但是相比于遍历法,递归法的实现可能会更加复杂,而且在链表长度过大时可能会导致栈溢出。
3. 思考:对于单链表中元素最大值的求解,还可以考虑是否可以借助其他数据结构,如堆或者优先队列,来实现更加高效的求解方法。
这需要对数据结构与算法进行综合考虑与分析。
四、结点数的求解1. 遍历法:同样可以使用遍历法来求解单链表的结点数,从链表的头结点开始,一直遍历到尾部结点,在遍历过程中记录下结点的个数即可。
该方法的时间复杂度同样为O(n)。
2. 递归法:类似地,也可以使用递归法来逐个遍历结点,并更新结点个数。
但是同样需要注意在链表长度过大时可能会出现栈溢出的情况。
3. 思考:对于单链表中结点数的求解,是否可以通过对链表的结构进行改造或者引入新的数据结构,来实现更加高效的求解方法也是值得思考的问题。
五、总结求解单链表中元素最大值以及结点数是一个基础的算法问题,也是对程序设计能力的考验。
在实际工作中,对于常用数据结构的基本操作,如单链表的遍历与求解问题,需要熟练运用常见的解题方法,同时也需要培养自己发现问题、分析问题和解决问题的能力。
六、参考资料1. 《算法导论》2. 《数据结构与算法分析》3. 《程序设计导论》七、致谢感谢各位老师和同学在我学习和工作中给予的帮助与支持,让我不断提高自己的算法与编程能力。
数据结构与算法经典书籍1. 《算法导论》《算法导论》是计算机科学领域中经典的教材,由Thomas H. Cormen等人合著。
该书详细介绍了各种常用的数据结构和算法,包括排序、查找、图算法等。
它以清晰的语言和丰富的实例展示了算法的设计和分析方法,对于理解和掌握算法设计与分析的基本原理具有重要意义。
2. 《数据结构与算法分析:C++语言描述》该书由Mark Allen Weiss编写,是一本介绍数据结构和算法的经典教材。
它以C++语言为基础,详细讲解了各种常用的数据结构(如链表、栈、队列、树、图等)和算法(如排序、查找、图算法等),并给出了具体的代码实现。
同时,该书还重点讲解了算法的分析和性能评估,帮助读者理解算法的时间复杂度和空间复杂度。
3. 《算法》《算法》是Sedgewick和Wayne合著的一本数据结构和算法教材。
该书系统地介绍了各种常用的数据结构和算法,并通过大量的示例和习题帮助读者巩固所学知识。
它涵盖了排序、查找、图算法等领域,并提供了Java和C++两种语言实现的代码。
这本书以其简洁明了的风格和深入浅出的讲解方法,深受学生和专业人士的喜爱。
4. 《编程珠玑》《编程珠玑》是Jon Bentley所著的一本经典之作,介绍了一系列有关程序设计和算法的问题及解决方法。
该书通过实际问题的分析和解决过程,展示了一种高效的编程思维方式。
它以具体的案例引入问题,然后通过分析和优化算法,给出了高效的解决方案。
这本书不仅适合程序员和软件工程师,也对于对算法和数据结构感兴趣的读者具有很高的参考价值。
5. 《数据结构与算法分析:Java语言描述》该书由Mark Allen Weiss编写,是一本使用Java语言描述的数据结构和算法教材。
它以清晰的语言和丰富的实例介绍了各种常用的数据结构和算法,并给出了具体的代码实现。
同时,该书还讲解了算法的分析和性能评估,帮助读者理解算法的时间复杂度和空间复杂度。
6. 《剑指Offer:名企面试官精讲典型编程题》《剑指Offer》是一本专注于面试编程题的书籍,该书由左程云所著。
数据结构经典书籍数据结构是计算机科学中的一门基础课程,它研究如何组织和存储数据,以便能够高效地访问和操作。
在学习数据结构时,经典书籍是我们不可或缺的学习资料。
下面是我列举的一些经典的数据结构书籍,它们涵盖了各种不同的数据结构和算法,帮助读者深入理解和掌握数据结构的基本原理和应用。
1. 《数据结构与算法分析》这本书由Mark Allen Weiss编写,是数据结构领域的经典教材之一。
它介绍了各种常见的数据结构和算法,并提供了详细的分析和实现示例。
该书以清晰的语言和丰富的示意图,帮助读者理解不同数据结构的特点和应用场景。
2. 《算法导论》由Thomas H. Cormen等人编写的《算法导论》是计算机科学领域最具影响力的教材之一。
它包含了广泛的算法和数据结构内容,并提供了详细的证明和分析。
该书不仅适合作为教材使用,也是研究和实践中的重要参考资料。
3. 《数据结构与算法分析:C语言描述》这本书由Clifford A. Shaffer编写,以C语言为基础,介绍了数据结构和算法的基本概念和实现方法。
该书通过大量的示例代码和练习题,帮助读者巩固和应用所学知识。
4. 《算法(第4版)》由Robert Sedgewick和Kevin Wayne合著的《算法(第4版)》是一本全面介绍算法和数据结构的教材。
该书以Java语言为例,涵盖了各种经典算法和数据结构的实现和分析。
它还提供了大量的练习题和在线学习资源,帮助读者深入理解和应用所学知识。
5. 《数据结构与算法分析:Java语言描述》这本书由Mark Allen Weiss编写,以Java语言为基础,介绍了数据结构和算法的基本概念和实现方法。
它通过清晰的示例代码和详细的分析,帮助读者理解和应用不同数据结构和算法。
6. 《数据结构与算法分析:Python语言描述》由Clifford A. Shaffer编写的《数据结构与算法分析:Python语言描述》是一本以Python语言为基础的数据结构教材。
⼗⼤经典排序算法(动图演⽰)0、算法概述0.1 算法分类⼗种常见排序算法可以分为两⼤类:⽐较类排序:通过⽐较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为⾮线性时间⽐较类排序。
⾮⽐较类排序:不通过⽐较来决定元素间的相对次序,它可以突破基于⽐较排序的时间下界,以线性时间运⾏,因此也称为线性时间⾮⽐较类排序。
0.2 算法复杂度0.3 相关概念稳定:如果a原本在b前⾯,⽽a=b,排序之后a仍然在b的前⾯。
不稳定:如果a原本在b的前⾯,⽽a=b,排序之后 a 可能会出现在 b 的后⾯。
时间复杂度:对排序数据的总的操作次数。
反映当n变化时,操作次数呈现什么规律。
空间复杂度:是指算法在计算机内执⾏时所需存储空间的度量,它也是数据规模n的函数。
1、冒泡排序(Bubble Sort)冒泡排序是⼀种简单的排序算法。
它重复地⾛访过要排序的数列,⼀次⽐较两个元素,如果它们的顺序错误就把它们交换过来。
⾛访数列的⼯作是重复地进⾏直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越⼩的元素会经由交换慢慢“浮”到数列的顶端。
1.1 算法描述⽐较相邻的元素。
如果第⼀个⽐第⼆个⼤,就交换它们两个;对每⼀对相邻元素作同样的⼯作,从开始第⼀对到结尾的最后⼀对,这样在最后的元素应该会是最⼤的数;针对所有的元素重复以上的步骤,除了最后⼀个;重复步骤1~3,直到排序完成。
1.2 动图演⽰1.3 代码实现function bubbleSort(arr) {var len = arr.length;for (var i = 0; i < len - 1; i++) {for (var j = 0; j < len - 1 - i; j++) {if (arr[j] > arr[j+1]) { // 相邻元素两两对⽐var temp = arr[j+1]; // 元素交换arr[j+1] = arr[j];arr[j] = temp;}}}return arr;}2、选择排序(Selection Sort)选择排序(Selection-sort)是⼀种简单直观的排序算法。
《算法:第4版》(Sedgewick之巨著,与高德纳TAOCP一脉相承)∙定价:¥99.00∙会员价:¥72.27(73折)∙校园优惠价:¥72.27(73折)∙原书名:Algorithms, Fourth Edition∙作者:(美)塞奇威克(Sedgewick,R.)(美)韦恩(Wayne,K.)∙译者:谢路云∙丛书名:图灵程序设计丛书∙出版社:人民邮电出版社∙ISBN:9787115293800∙上架时间:2012-9-29∙出版日期:2012 年10月∙开本:16开∙页码:636∙版次:1-1前言本书力图研究当今最重要的计算机算法并将一些最基础的技能传授给广大求知者。
它适合用做计算机科学进阶教材,面向已经熟悉了计算机系统并掌握了基本编程技能的学生。
本书也可用于自学,或是作为开发人员的参考手册,因为书中实现了许多实用算法并详尽分析了它们的性能特点和用途。
这本书取材广泛,很适合作为该领域的入门教材。
算法和数据结构的学习是所有计算机科学教学计划的基础,但它并不只是对程序员和计算机系的学生有用。
任何计算机使用者都希望计算机能运行得更快一些或是能解决更大规模的问题。
本书中的算法代表了近50年来的大量优秀研究成果,是人们工作中必备的知识。
从物理中的N体模拟问题到分子生物学中的基因序列问题,我们描述的基本方法对科学研究而言已经必不可少;从建筑建模系统到模拟飞行器,这些算法已经成为工程领域极其重要的工具;从数据库系统到互联网搜索引擎,算法已成为现代软件系统中不可或缺的一部分。
这仅是几个例子而已,随着计算机应用领域的不断扩张,这些基础方法的影响也会不断扩大。
在开始学习这些基础算法之前,我们先要熟悉全书中都将会用到的栈、队列等低级抽象的数据类型。
然后依次研究排序、搜索、图和字符串方面的基础算法。
最后一章将会从宏观角度总结全书的内容。
独特之处本书致力于研究有实用价值的算法。
书中讲解了多种算法和数据结构,并提供了大量相关的信息,读者应该能有信心在各种计算环境下实现、调试并应用它们。
本书的特点涉及以下几个方面。
算法书中均有算法的完整实现,并讨论了程序在多个样例上的运行状况。
书中的代码都是可以运行的程序而非伪代码,因此非常便于投入使用。
书中程序是用Java语言编写的,但其编程风格方便读者使用其他现代编程语言重用其中的大部分代码来实现相同算法。
数据类型我们在数据抽象上采用了现代编程风格,将数据结构和算法封装在了一起。
应用每一章都会给出所述算法起到关键作用的应用场景。
这些场景多种多样,包括物理模拟与分子生物学、计算机与系统工程学,以及我们熟悉的数据压缩和网络搜索等。
学术性我们非常重视使用数学模型来描述算法的性能。
我们用模型预测算法的性能,然后在真实的环境中运行程序来验证预测。
广_____度本书讨论了基本的抽象数据类型、排序算法、搜索算法、图及字符串处理。
我们在算法的讨论中研究数据结构、算法设计范式、归纳法和解题模型。
这将涵盖20世纪60年代以来的经典方法以及近年来产生的新方法。
我们的主要目标是将今天最重要的实用算法介绍给尽可能广泛的群体。
这些算法一般都十分巧妙奇特,20行左右的代码就足以表达。
它们展现出的问题解决能力令人叹为观止。
没有它们,创造计算智能、解决科学问题、开发商业软件都是不可能的。
本书网站本书的一个亮点是它的配套网站。
这一网站面向教师、学生和专业人士,免费提供关于算法和数据结构的丰富资料。
一份在线大纲包含了本书内容的结构并提供了链接,浏览起来十分方便。
全部实现代码书中所有的代码均可以在这里找到,且其形式适合用于程序开发。
此外,还包括算法的其他实现,例如高级的实现、书中提及的改进的实现、部分习题的答案以及多个应用场景的客户端代码。
我们的重点是用真实的应用环境来测试算法。
习题与答案网站还提供了一些附加的选择题(只需要一次单击便可获取答案)、很多算法应用的例子、编程练习和答案以及一些有挑战性的难题。
动态可视化书是死的,但网站是活的,在这里我们充分利用图形类演示了算法的应用效果。
课程资料网站包含和本书及网上内容对应的一整套幻灯片,以及一系列编程作业、核对表、测试数据和备课手册。
相关资料链接网站包含大量的链接,提供算法应用的更多背景知识以及学习算法的其他资源。
我们希望这个站点和本书互为补充。
一般来说,建议读者在第一次学习某种算法或是希望获得整体概念时看书,并把网站作为编程时的参考或是在线查找更多信息的起点。
作为教材本书为计算机科学专业进阶的教材,涵盖了这门学科的核心内容,并能让学生充分锻炼编程、定量推理和解决问题等方面的能力。
一般来说,此前学过一门计算机方面的先导课程就足矣,只要熟悉一门现代编程语言并熟知现代计算机系统,就都能够阅读本书。
虽然本书使用Java实现算法和数据结构,但其代码风格使得熟悉其他现代编程语言的人也能看懂。
我们充分利用了Java的抽象性(包括泛型),但不会依赖这门语言的独门特性。
. 书中涉及的多数数学知识都有完整的讲解(少数会有延伸阅读),因此阅读本书并不需要准备太多数学知识,不过有一定的数学基础当然更好。
应用场景都来自其他学科的基础内容,同样也在书中有完整介绍。
本书涉及的内容是任何准备主修计算机科学、电气工程、运筹学等专业的学生应了解的基础知识,并且对所有对科学、数学或工程学感兴趣的学生也十分有价值。
背景介绍这本书意在接续我们的一本基础教材《Java程序设计:一种跨学科的方法》,那本书对计算机领域做了概括性介绍。
这两本书合起来可用做两到三个学期的计算机科学入门课程教材,为所有学生在自然科学、工程学和社会科学中解决计算问题提供必备的基础知识。
本书大部分内容来自Sedgewick的算法系列图书。
本质上,本书和该系列的第1版和第2版最接近,但还包含了作者多年教学和学习的经验。
Sedgewick的《C算法(第3版)》、《C++算法(第3版)》、《Java算法(第3版)》更适合用做参考书或是高级课程的教材,而本书则是专门为大学一、二年级学生设计的一学期教材,也是最新的基础入门书或从业者的参考书。
致谢本书的编写花了近40年时间,因此想要一一列出所有参与人是不可能的。
本书的前几版一共列出了好几十人,其中包括(按字母顺序)Andrew Appel、Trina Avery、Marc Brown、Lyn Dupré、PhilippeFlajolet、Tom Freeman、Dave Hanson、Janet Incerpi、Mike Schidlowsky、Steve Summit和Chris VanWyk。
我要感谢他们所有人,尽管其中有些人的贡献要追溯到几十年前。
至于第4版,我们要感谢试用了本书样稿的普林斯顿及其他院校的数百名学生,以及通过本书网站发表意见和指出错误的世界各地的读者。
我们还要感谢普林斯顿大学对于高质量教学的坚定支持,这是本书得以面世的基础。
Peter Gordon几乎从本书写作之初就提出了很多有用的建议,这一版奉行的“归本溯源”的指导思想也是他最早提出的。
关于第4版,我们要感谢Barbara Wood认真又专业的编辑工作,Julie Nahil对生产过程的管理,以及Pearson出版公司中为本书的付梓和营销辛勤工作的朋友。
所有人都在积极地追赶进度,而本书的质量并没有受到丝毫影响。
目录《算法:第4版》第1章基础11.1 基础编程模型41.1.1 java程序的基本结构 41.1.2 原始数据类型与表达式 61.1.3 语句81.1.4 简便记法91.1.5 数组101.1.6 静态方法121.1.7 api 161.1.8 字符串201.1.9 输入输出211.1.10 二分查找281.1.11 展望301.2 数据抽象381.2.1 使用抽象数据类型381.2.2 抽象数据类型举例451.2.3 抽象数据类型的实现521.2.4 更多抽象数据类型的实现55 1.2.5 数据类型的设计60.1.3 背包、队列和栈741.3.1 api 741.3.2 集合类数据类型的实现811.3.3 链表891.3.4 综述981.4 算法分析1081.4.1 科学方法1081.4.2 观察1081.4.3 数学模型1121.4.4 增长数量级的分类1171.4.5 设计更快的算法1181.4.6 倍率实验1211.4.7 注意事项1231.4.8 处理对于输入的依赖1241.4.9 内存1261.4.10 展望1291.5 案例研究:union-find算法136 1.5.1 动态连通性1361.5.2 实现1401.5.3 展望148第2章排序1522.1 初级排序算法1532.1.1 游戏规则1532.1.2 选择排序1552.1.3 插入排序157 2.1.4 排序算法的可视化1592.1.5 比较两种排序算法1592.1.6 希尔排序1622.2 归并排序1702.2.1 原地归并的抽象方法1702.2.2 自顶向下的归并排序1712.2.3 自底向上的归并排序1752.2.4 排序算法的复杂度1772.3 快速排序1822.3.1 基本算法1822.3.2 性能特点1852.3.3 算法改进1872.4 优先队列1952.4.1 api 1952.4.2 初级实现1972.4.3 堆的定义1982.4.4 堆的算法1992.4.5 堆排序2052.5 应用2142.5.1 将各种数据排序2142.5.2 我应该使用哪种排序算法218 2.5.3 问题的归约2192.5.4 排序应用一览221第3章查找2273.1 符号表2283.1.1 api 2283.1.2 有序符号表2303.1.3 用例举例2333.1.4 无序链表中的顺序查找2353.1.5 有序数组中的二分查找2383.1.6 对二分查找的分析2423.1.7 预览2443.2 二叉查找树2503.2.1 基本实现2503.2.2 分析2553.2.3 有序性相关的方法与删除操作257 3.3 平衡查找树2693.3.1 2-3查找树2693.3.2 红黑二叉查找树2753.3.3 实现2803.3.4 删除操作2823.3.5 红黑树的性质2843.4 散列表2933.4.1 散列函数2933.4.2 基于拉链法的散列表2973.4.3 基于线性探测法的散列表3003.4.4 调整数组大小3043.4.5 内存使用3063.5 应用3123.5.1 我应该使用符号表的哪种实现3123.5.2 集合的api 3133.5.3 字典类用例3153.5.4 索引类用例3183.5.5 稀疏向量322第4章图3294.1 无向图3314.1.1 术语表3314.1.2 表示无向图的数据类型3334.1.3 深度优先搜索3384.1.4 寻找路径3424.1.5 广度优先搜索3444.1.6 连通分量3494.1.7 符号图3524.1.8 总结3584.2 有向图3644.2.1 术语3644.2.2 有向图的数据类型3654.2.3 有向图中的可达性3674.2.4 环和有向无环图3694.2.5 有向图中的强连通性3784.2.6 总结3854.3 最小生成树3904.3.1 原理3914.3.2 加权无向图的数据类型3934.3.3 最小生成树的api和测试用例3964.3.4 prim算法3984.3.5 prim算法的即时实现4014.3.6 kruskal算法4044.3.7 展望4074.4 最短路径4124.4.1 最短路径的性质4134.4.2 加权有向图的数据结构4144.4.3 最短路径算法的理论基础4204.4.4 dijkstra算法4214.4.5 无环加权有向图中的最短路径算法425 4.4.6 一般加权有向图中的最短路径问题433 4.4.7 展望445第5章字符串4515.1 字符串排序4555.1.1 键索引计数法4555.1.2 低位优先的字符串排序4585.1.3 高位优先的字符串排序461 5.1.4 三向字符串快速排序4675.1.5 字符串排序算法的选择4705.2 单词查找树4745.2.1 单词查找树4755.2.2 单词查找树的性质4835.2.3 三向单词查找树4855.2.4 三向单词查找树的性质4875.2.5 应该使用字符串符号表的哪种实现489 5.3 子字符串查找4935.3.1 历史简介4935.3.2 暴力子字符串查找算法4945.3.3 knuth-morris-pratt子字符串查找算法4965.3.4 boyer-moore字符串查找算法5025.3.5 rabin-karp指纹字符串查找算法505 5.3.6 总结5095.4 正则表达式5145.4.1 使用正则表达式描述模式5145.4.2 缩略写法5165.4.3 正则表达式的实际应用5175.4.4 非确定有限状态自动机5185.4.5 模拟nfa的运行5205.4.6 构造与正则表达式对应的5.5 数据压缩5295.5.1 游戏规则5295.5.2 读写二进制数据5305.5.3 局限5335.5.4 热身运动:基因组5345.5.5 游程编码5375.5.6 霍夫曼压缩540第6章背景558索引611。