算法基础 - 打开程序设计之门 PDF 文档

发布于 2024-07-15 22:47:29 字数 3850 浏览 35 评论 0

算法是一系列解决问题的清晰指令,是程序设计的灵魂。同一问题可采用不同的算法解决,而一个算法的优劣将直接影响程序的执行效率。

本书以 ACM 程序设计竞赛的题目为基础,详细介绍一些常用的算法以及相关的理论知识,主要内容包括高级数据结构、字符串、动态规划进阶算法、图论高级算法、经典算法问题、组合数学、计算几何、组合游戏论。本书适合计算机专业的学生以及对程序设计竞赛感兴趣的读者阅读。

这是一本关于算法的教程。算法是一系列解决问题的清晰指令,可以说它是程序设计的灵魂。同一问题可用不同的算法解决,而一个算法的质量优劣将影响程序的执行效率。算法分析的目的在于选择合适算法和改进算法。评价一个算法的好坏主要是通过算法运行的时间长短和占用空间的大小来评估的。对于计算机专业或者爱好计算机的人士来说,无论学习还是工作,或多或少都会应用一些算法的知识。而目前国内外大型互联网公司在招聘时的笔试和面试都以算法为主。可见,算法的重要性是不言而喻的。

目录
第 1 章 高级数据结构
1.1 堆
1.1.1 堆的定义
1.1.2 建堆
1.1.3 堆排序算法
1.2 树状数组
1.2.1 树状数组的定义
1.2.2 树状数组的实现和使用
1.2.3 例题讲解
1.3 左倾堆
1.3.1 左倾堆相关定义和性质
1.3.2 左倾堆的操作
1.3.3 例题讲解
1.4 平衡二叉树
1.4.1 Treap
1.4.2 Splay 树
1.4.3 例题讲解
1.5 练习题
第 2 章 字符串
2.1 Trie 树
2.1.1 Trie 树的原理
2.1.2 Trie 树的实现
2.1.3 例题讲解
2.2 KMP 算法
2.2.1 KMP 算法的原理
2.2.2 KMP 算法的实现
2.2.3 例题讲解
2.3 Aho-Corasick 自动机
2.3.1 Aho-Corasick 自动机原理
2.3.2 Aho-Corasick 自动机算法的实现
2.3.3 例题讲解
2.4 后缀数组
2.4.1 后缀数组基本原理
2.4.2 后缀数组的应用
2.4.3 例题讲解
2.5 练习题
第 3 章 动态规划进阶算法
3.1 树状 DP
3.1.1 树状 DP 的定义
3.1.2 树状 DP 解题方法
3.1.3 例题讲解
3.2 状态压缩 DP
3.2.1 集合的整数表示
3.2.2 例题讲解
3.3 动态规划的优化方法
3.3.1 单调队列优化的动态规划
3.3.2 例题讲解
3.3.3 斜率优化的动态规划
3.3.4 例题讲解
3.3.5 四边形不等式优化的动态规划
3.3.6 例题讲解
3.4 练习题
第 4 章 图论高级算法
4.1 最大流
4.1.1 最大流的定义
4.1.2 增广路算法涉及的三个重要概念
4.1.3 Edmonds-Karp 算法
4.1.4 Dinic 算法
4.1.5 ISAP 算法
4.1.6 网络流的建图
4.1.7 例题讲解
4.2 最小费用流
4.2.1 最小费用流算法
4.2.2 例题讲解
4.3 二分图匹配
4.3.1 二分图的定义
4.3.2 二分图的最大匹配
4.3.3 二分图的性质与应用
4.3.4 例题讲解
4.4 练习题
第 5 章 经典算法问题
5.1 多项式与快速傅里叶变换
5.1.1 多项式
5.1.2 多项式的表示与多项式乘法
5.1.3 DFT 和 FFT 的实现
5.1.4 例题讲解
5.2 NP 完全性
5.2.1 NP 问题简介
5.2.2 哈密顿回路
5.2.3 例题讲解
5.3 对偶图问题
5.3.1 基本概念
5.3.2 平面图转化为对偶图
5.3.3 对偶图的应用
5.4 RMQ 问题
5.4.1 RMQ 问题的简单求解方法
5.4.2 ST(Sparse Table)算法
5.4.3 例题讲解
5.5 LCA 问题
5.5.1 LCA 问题的简单求解方法
5.5.2 基于倍增的双亲存储法
5.5.3 高效的 LCA 算法
5.5.4 例题讲解
5.6 练习题
第 6 章 组合数学
6.1 排列组合
6.1.1 基本计数原则
6.1.2 排列
6.1.3 组合
6.1.4 例题讲解
6.2 母函数
6.2.1 母函数基础
6.2.2 母函数的两类具体应用
6.2.3 例题讲解
6.3 整数划分
6.3.1 从动态规划到母函数
6.3.2 例题讲解
6.4 Stirling 数和 Catalan 数
6.4.1 第一类 Stirling 数
6.4.2 第二类 Stirling 数
6.4.3 Catalan 数
6.4.4 例题讲解
6.5 容斥原理与反演
6.5.1 容斥原理
6.5.2 反演理论
6.5.3 Mobius 反演
6.5.4 例题讲解
6.6 群论与 Polya 定理
6.6.1 群的基本性质
6.6.2 置换群
6.6.3 Burnside 定理及 Polya 定理
6.6.4 例题讲解
6.7 练习题
第 7 章 计算几何
7.1 多边形上的数据结构表示
7.1.1 点
7.1.2 线段
7.1.3 多边形类
7.1.4 例题讲解
7.2 多边形相交问题
7.2.1 线段相交
7.2.2 多边形相交问题的讨论
7.2.3 例题讲解
7.3 多边形求面积
7.3.1 计算多边形的面积
7.3.2 格点数
7.3.3 例题讲解
7.4 凸包
7.4.1 凸多边形
7.4.2 凸多边形的性质
7.4.3 构造凸包
7.4.4 例题讲解
7.5 相交问题
7.5.1 半平面交
7.5.2 凸多边形交
7.5.3 例题讲解
7.6 圆
7.6.1 圆与线段的交
7.6.2 圆与多边形的交的面积
7.6.3 圆与圆的交的面积
7.6.4 圆与圆的并的面积
7.7 练习题
第 8 章 组合游戏论
8.1 组合游戏论中的游戏
8.1.1 组合游戏论的定义
8.1.2 博弈树模型
8.1.3 巴什博弈
8.1.4 威佐夫博弈
8.1.5 例题讲解
8.2 NIM 游戏和 SG 函数
8.2.1 NIM 游戏的定义
8.2.2 NIM 游戏中的性质
8.2.3 Sprague-Grundy 函数的价值
8.2.4 SG 函数的应用
8.2.5 例题讲解
8.3 NIM 游戏的变形
8.3.1 ANTI-NIM 问题
8.3.2 Staircase NIM
8.3.3 例题讲解
8.4 练习题
参考文献

下载地址:https://www.wenjiangs.com/wp-content/uploads/2024/05/dcVmHzpHxhBzKIgF.zip

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

末蓝

文章 0 评论 0

年少掌心

文章 0 评论 0

党海生

文章 0 评论 0

飞翔的企鹅

文章 0 评论 0

鹿港小镇

文章 0 评论 0

wookoon

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文