编辑推荐

算法详解四部曲第一卷,详解算法基础,展现算法本质
集斯坦福大学教授多年教学经验,深入浅出,通俗易懂

算法是计算机科学的核心与灵魂。算法的应用范围极广,网络路由、计算基因组学、公钥加密学和数据库系统等的实现都需要算法。研究算法可以帮助我们成为更优秀的程序员,可以让我们具有更缜密的思维,并成功应对各种场合的技术面试。

这是一本非常容易上手的算法入门图书,它可作为程序员的学习用书,也适合想要学习算法和想提升算法思维能力的读者阅读。

算法详解 卷1 算法基础》主要包括以下内容:
渐进性分析;
大O表示法;
主方法;
快速分治算法;
随机化算法;
排序算法;
选择算法。

内容简介

算法是计算机科学领域*重要的基石之一。算法是程序的灵魂,只有掌握了算法,才能轻松地驾驭程序开发。
算法详解系列图书共有4卷,《算法详解 卷1 算法基础》是第1卷——算法基础。《算法详解 卷1 算法基础》共有6章,主要介绍了4个主题,它们分别是渐进性分析和大O表示法、分治算法和主方法、随机化算法以及排序和选择。附录A和附录B简单介绍了数据归纳法和离散概率的相关知识。《算法详解 卷1 算法基础》的每一章均有小测验、章末习题和编程题,这为读者的自我检查以及进一步学习提供了较多的便利。
算法详解 卷1 算法基础》为对算法感兴趣的广大读者提供了丰富而实用的资料,能够帮助读者提升算法思维能力。《算法详解 卷1 算法基础》适合计算机专业的高校教师和学生,想要培养和训练算法思维和计算思维的IT专业人士,以及在准备面试的应聘者和面试官阅读参考。

作者简介

蒂姆·拉夫加登(TimRoughgarden)是斯坦福大学计算机科学系的教授,也是该校管理科学和工程系的客座教授,他从2004年开始教授和研究算法。《算法详解 卷1 算法基础》是他的《算法详解》四部曲的第一卷,基于他从2012年开始定期举行的在线算法课程编写。

目录

第1章绪论1
1.1为什么要学习算法1
1.2整数乘法3
1.2.1问题和解决方案3
1.2.2整数乘法问题3
1.2.3小学算法4
1.2.4操作数量的分析5
1.2.5还能做得更好吗5
1.3Karatsuba乘法6
1.3.1一个具体的例子6
1.3.2一种递归算法7
1.3.3Karatsuba乘法9
1.4MergeSort算法11
1.4.1推动力11
1.4.2排序12
1.4.3一个例子13
1.4.4伪码14
1.4.5Merge子程序15
1.5MergeSort算法分析16
1.5.1Merge的运行时间17
1.5.2MergeSort的运行时间18
1.5.3定理1.2的证明19
1.5.4小测验1.1~1.2的答案23
1.6算法分析的指导原则23
1.6.1第1个原则:最坏情况分析24
1.6.2第2个原则:全局分析25
1.6.3第3个原则:渐进性分析26
1.6.4什么是“快速”算法27
1.7本章要点28
1.8习题29
挑战题31
编程题31
第2章渐进性表示法32
2.1要旨32
2.1.1推动力32
2.1.2高级思维33
2.1.34个例子34
2.1.4小测验2.1~2.4的答案38
2.2大O表示法40
2.2.1文本定义40
2.2.2图形定义40
2.2.3数学定义41
2.3两个基本例子42
2.3.1k阶多项式是O(nk)42
2.3.2k阶多项式不是O(nk-1)43
2.4大Ω和大表示法44
2.4.1大Ω表示法44
2.4.2大表示法45
2.4.3小O表示法46
2.4.4渐进性表示法的来源47
2.4.5小测验2.5的答案48
2.5其他例子48
2.5.1在指数中添加一个常数48
2.5.2指数乘以一个常数49
2.5.3最大值vs.和49
2.6本章要点50
2.7习题51
第3章分治算法53
3.1分治法规范53
3.2以O(nlogn)时间计数逆序对54
3.2.1问题54
3.2.2一个例子54
3.2.3协同筛选55
3.2.4穷举搜索法55
3.2.5分治法56
3.2.6高级算法57
3.2.7关键思路:站在MergeSort的肩膀上57
3.2.8重温Merge58
3.2.9Merge和分离逆序对60
3.2.10Merge_and_CountSplitInv61
3.2.11正确性61
3.2.12运行时间62
3.2.13小测验3.1~3.2的答案62
3.3Strassen的矩阵相乘算法63
3.3.1矩阵相乘63
3.3.2例子(n=2)64
3.3.3简单算法64
3.3.4分治法65
3.3.5节省一个递归调用67
3.3.6细节68
3.3.7小测验3.3的答案69
*3.4O(nlogn)时间的最近点对(ClosestPair)算法70
3.4.1问题70
3.4.2热身:1D情况71
3.4.3预处理71
3.4.4一种分治方法72
3.4.5一个微妙的变化74
3.4.6ClosestSplitPair74
3.4.7正确性76
3.4.8辅助结论3.3(a)的证明77
3.4.9辅助结论3.3(b)的证明78
3.4.10小测验3.4的答案80
3.5本章要点80
3.6习题81
挑战题81
编程题82
第4章主方法83
4.1重温整数乘法83
4.1.1RecIntMult算法84
4.1.2Karatsuba算法84
4.1.3比较递归过程85
4.2形式声明86
4.2.1标准递归过程86
4.2.2主方法的陈述和讨论87
4.36个例子88
4.3.1重温MergeSort89
4.3.2二分搜索89
4.3.3整数乘法的递归算法90
4.3.4Karatsuba乘法90
4.3.5矩阵乘法91
4.3.6一个虚构的递归过程92
4.3.7小测验4.2~4.3的答案93
*4.4主方法的证明94
4.4.1前言94
4.4.2重温递归树95
4.4.3单层所完成的工作96
4.4.4各层累计97
4.4.5正义与邪恶:需要考虑3种情况98
4.4.6预告运行时间上界99
4.4.7最后的计算:第一种情况100
4.4.8迂回之旅:几何级数101
4.4.9最后的计算:第二种情况和第三种情况102
4.4.10小测验4.4~4.5的答案103
4.5本章要点103
4.6习题104
第5章快速排序(QuickSort)107
5.1概述107
5.1.1排序108
5.1.2根据基准元素进行划分108
5.1.3高级描述110
5.1.4内容前瞻110
5.2围绕基准元素进行划分111
5.2.1简易方法111
5.2.2原地实现:高级计划112
5.2.3例子113
5.2.4Partition子程序的伪码115
5.2.5QuickSort的伪码117
5.3良好的基准元素的重要性117
5.3.1ChoosePivot的简单实现118
5.3.2ChoosePivot的过度实现118
5.3.3小测验5.1~5.2的答案119
5.4随机化的QuickSort121
5.4.1ChoosePivot的随机化实现121
5.4.2随机化QuickSort的运行时间122
5.4.3直觉:随机基准元素为什么很好123
*5.5随机化QuickSort的分析124
5.5.1预备工作125
5.5.2分解蓝图126
5.5.3应用蓝图128
5.5.4计算比较的概率130
5.5.5最后的计算132
5.5.6小测验5.3的答案133
*5.6排序需要(nlogn)的比较134
5.6.1基于比较的排序算法134
5.6.2具有更强前提的更快速排序135
5.6.3定理5.5的证明136
5.7本章要点138
5.8习题139
挑战题140
编程题141
第6章线性时间级的选择142
6.1RSelect算法143
6.1.1选择问题143
6.1.2简化为排序144
6.1.3分治法145
6.1.4RSelect的伪码146
6.1.5RSelect的运行时间147
6.1.6小测验6.1~6.2的答案149
*6.2RSelect的分析150
6.2.1根据阶段追踪进展150
6.2.2简化为掷硬币151
6.2.3综合结论153
*6.3DSelect算法154
6.3.1基本思路:中位的中位元素154
6.3.2DSelect的伪码155
6.3.3理解DSelect156
6.3.4DSelect的运行时间157
*6.4DSelect的分析159
6.4.1递归调用之外所完成的工作159
6.4.2一个粗略的递归过程159
6.4.330-70辅助结论160
6.4.4解析递归过程163
6.4.5先猜后验方法164
6.5本章要点166
6.6本章习题166
挑战题167
编程题168
附录A快速回顾数学归纳法169
附录B快速回顾离散概率173

其他推荐