算法详解(卷2):图算法和数据结构

算法详解(卷2):图算法和数据结构

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

本书为“算法详解”系列之一。详细讲解算法基础,展现算法本质。

内容简介

本书共有6章,主要介绍了3个主题,分别是图的搜索和应用、最短路径以及数据结构。附录简单回顾了渐进性表示法。本书的每一章均有小测验、章末习题,这为读者的自我检查以及进一步学习提供了方便。

本书提供了丰富而实用的资料,能够帮助读者提升算法思维能力。本书适合计算机专业的高校教师和学生,想要培养和训练算法思维和计算思维的IT专业人士,以及正在准备面试的应聘者和面试官阅读参考。

作者简介

作者蒂姆·拉夫加登,哥伦比亚大学计算机科学系的教授,之前曾任教于斯坦福大学计算机科学系,他从2004年开始教授和研究算法。

章节目录

版权信息

版权声明

内容提要

前 言

资源与支持

第1章 图的基础知识

1.1 基本术语

1.2 图的一些应用

1.3 图形的度量

1.3.1 图的边数量

1.3.2 稀疏图和稠密图

1.3.3 小测验1.1的答案

1.4 图的表示方法

1.4.1 邻接列表

1.4.2 邻接矩阵

1.4.3 图的表示形式之间的比较

1.4.4 小测验1.2和小测验1.3的答案

1.5 本章要点

1.6 章末习题

第2章 图的搜索及其应用

2.1 概述

2.1.1 一些应用

2.1.2 零代价的基本算法

2.1.3 通用的图搜索算法

2.1.4 宽度优先的搜索和深度优先的搜索

2.1.5 GenericSearch算法的正确性

2.2 宽度优先的搜索和最短路径

2.2.1 高层思路

2.2.2 BFS的伪码

2.2.3 BFS的一个例子

2.2.4 正确性和运行时间

2.2.5 最短路径

2.2.6 小测验2.1的答案

2.3 计算连通分量

2.3.1 连通分量

2.3.2 连通分量的应用

2.3.3 UCC(无向图连通分量)算法

2.3.4 UCC算法的一个例子

2.3.5 UCC算法的正确性和运行时间

2.3.6 小测验2.2的答案

2.4 深度优先的搜索

2.4.1 DFS的一个例子

2.4.2 DFS的伪码

2.4.3 正确性和运行时间

2.5 拓扑排序

2.5.1 拓扑顺序

2.5.2 什么时候存在拓扑顺序

2.5.3 计算拓扑顺序

2.5.4 通过DFS的拓扑排序

2.5.5 拓扑排序的一个例子

2.5.6 正确性和运行时间

2.5.7 小测验2.3和小测验2.4的答案

*2.6 计算强连通分量

2.6.1 强连通分量的定义

2.6.2 为什么要使用深度优先的搜索

2.6.3 为什么要使用反转的图

2.6.4 Kosaraju的伪码

2.6.5 一个例子

2.6.6 正确性和运行时间

2.6.7 小测验2.5和小测验2.6的答案

2.7 Web的结构

2.7.1 Web图

2.7.2 蝴蝶结

2.7.3 主要发现

2.8 本章要点

2.9 章末习题

挑战题

编程题

第3章 Dijkstra最短路径算法

3.1 单源最短路径问题

3.1.1 问题定义

3.1.2 一些前提条件

3.1.3 为什么不使用宽度优先的搜索

3.1.4 小测验3.1的答案

3.2 Dijkstra算法

3.2.1 伪码

3.2.2 一个例子

*3.3 为什么Dijkstra算法是正确的

3.3.1 一种虚假的简化

3.3.2 Dijkstra算法的一个糟糕例子

3.3.3 非负边长时的正确性

3.4 算法的实现及其运行时间

3.5 本章要点

3.6 章末习题

挑战题

编程题

第4章 堆数据结构

4.1 数据结构概述

4.1.1 选择正确的数据结构

4.1.2 进入更高层次

4.2 堆所支持的操作

4.2.1 Insert和ExtractMin

4.2.2 其他操作

4.3 堆的应用

4.3.1 应用:排序

4.3.2 应用:事件管理器

4.3.3 应用:中位值维护

4.4 Dijkstra算法的提速

4.4.1 为什么要使用堆

4.4.2 计划

4.4.3 维持不变性

4.4.4 运行时间

*4.5 实现细节

4.5.1 树形式的堆

4.5.2 数组形式的堆

4.5.3 在O (log n)时间内实现Insert操作

4.5.4 在O (log n)时间内实现ExtractMin操作

4.6 本章要点

4.7 章末习题

挑战题

编程题

第5章 搜索树

5.1 有序数组

5.1.1 有序数组支持的操作

5.1.2 有序数组不支持的操作

5.2 搜索树支持的操作

*5.3 实现细节

5.3.1 搜索树的属性

5.3.2 搜索树的高度

5.3.3 在O(高度)时间内实现Search

5.3.4 在O(高度)时间内实现Min和Max

5.3.5 在O(高度)时间内实现Predecessor

5.3.6 在O (n)时间内实现OutputSorted操作

5.3.7 在O(高度)时间内实现Insert操作

5.3.8 在O(高度)时间内实现Delete操作

5.3.9 强化的搜索树支持Select操作

5.3.10 小测验5.1的答案

*5.4 平衡搜索树

5.4.1 努力实现更好的平衡

5.4.2 旋转

5.5 本章要点

5.6 章末习题

编程题

第6章 散列表和布隆过滤器

6.1 支持的操作

6.2 散列表的应用

6.2.1 应用:消除重复

6.2.2 应用:两数之和问题

6.2.3 应用:搜索巨大的状态空间

6.2.4 小测验6.2的答案

*6.3 实现的高层思路

6.3.1 两个简单的解决方案

6.3.2 散列函数

6.3.3 冲突是不可避免的

6.3.4 解决冲突的方法:链地址法

6.3.5 解决冲突的方法:开放地址法

6.3.6 良好的散列函数是怎么样的

6.3.7 小测验6.3至小测验6.5的答案

*6.4 更多的实现细节

6.4.1 负载和性能

6.4.2 管理散列表的负载

6.4.3 选择散列函数

6.4.4 选择冲突解决策略

6.4.5 小测验6.6的答案

6.5 布隆过滤器的基础知识

6.5.1 布隆过滤器支持的操作

6.5.2 布隆过滤器的应用

6.5.3 布隆过滤器的实现

*6.6 布隆过滤器的启发式分析

6.6.1 启发式假设

6.6.2 部分位被设置为1

6.6.3 假阳性率

6.6.4 结束语

6.6.5 小测验6.7的答案

6.7 本章要点

6.8 章末习题

编程题

附录 快速回顾渐进性表示法

部分习题答案

算法详解(卷2):图算法和数据结构是2020年由人民邮电出版社出版,作者[美] 蒂姆·拉夫加登。

得书感谢您对《算法详解(卷2):图算法和数据结构》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
算法设计与分析 电子书
带你理解算法核心的问题。算法描述采用伪码,突出对问题本身的分析和求解方法的阐述。
Scratch编程入门与算法进阶(第2版) 电子书
Scratch是国际流行的图形化编程软件,使用者哪怕没有编程基础、不会编程语言,只要有清晰的思路,就可以通过拖曳各个功能模块的方式,设计出智能互动项目,轻松地把创意变成现实。本书同时也是中国电子学会全国青少年软件编程等级考试图形化编程(Scratch一级到四级)的指定用书,基于Scratch3.0中文版,在多个有趣小游戏的制作过程中对应每级考试要求讲解知识点,从图形化编程积木的应用方法,一直讲到程序的结构、算法的设计,内容丰富有趣,寓教于乐,让你逐步学会智能互动知识。对于青少年学习者,本书能够激发他们对编程的兴趣,指导他们了解并掌握Scratch编程技巧,培养他们的编程思维。本书与其他Scratch教程的**不同在于难度跨度设计得当,从简单应用逐步提升到基础算法内容,可以培养很好地编程思维,衔接代码编程。
联邦学习:原理与算法 电子书
人工智能机器学习教程书籍,平安科技联邦学习团队执笔,由浅入深介绍联邦机器学习的算法体系,注重工程实践,保证理论前沿性。
算法学习指南 电子书
本书深入阐述关键算法、数据结构、数据类型的基本原理。
机器学习算法竞赛实战 电子书
本书是算法竞赛领域一本系统介绍竞赛的图书,书中不仅包含竞赛的基本理论知识,还结合多个方向和案例详细阐述了竞赛中的上分思路和技巧。