算法

🌙
手机阅读
本文目录结构

算法

Sedgewick之巨著,与高德纳TAOCP一脉相承

几十年多次修订,经久不衰的畅销书

涵盖所有程序员必须掌握的50种算法

算法领域的经典参考书 众多图例实现图解算法和算法导论 基于Java语言实现算法和数据结构 熟练掌握算法设计与分析




内容简介

《算法(第 4 版)》全面讲述算法和数据结构的必备知识,具有以下几大特色。

  • 1、 算法领域的经典参考书:Sedgewick 畅销著作的新版,反映了经过几十年演化而成的算法核心知识体系
  • 2、内容全面:全面论述排序、搜索、图处理和字符串处理的算法和数据结构,涵盖每位程序员应知应会的 50 种算法
  • 3、全新修订的代码:全新的 Java 实现代码,采用模块化的编程风格,所有代码均可供读者使用
  • 4、与实际应用相结合:在重要的科学、工程和商业应用环境下探讨算法,给出了算法的实际代码,而非同类著作常用的伪代码
  • 5、富于智力趣味性:简明扼要的内容,用丰富的视觉元素展示的示例,精心设计的代码,详尽的历史和科学背景知识,各种难度的练习,这一切都将使读者手不释卷
  • 6、科学的方法:用合适的数学模型讨论算法性能,这些模型是在真实环境中得到验证的
  • 7、与网络相结合:配套网站 algs4.cs.princeton.edu 提供了本书内容的摘要及相关的代码、测试数据、编程练习、教学课件等资源

作者简介

Robert Sedgewick,斯坦福大学博士,导师为 Donald E. Knuth,从 1985 年开始一直担任普林斯顿大学计算机科学系教授,曾任该系主任,也是 Adobe Systems 公司董事会成员,曾在 Xerox PARC、国防分析研究所(Institute for Defense Analyses)和法国国家信息与自动化研究所(INRIA)从事研究工作。他的研究方向包括解析组合学、数据结构和算法的分析与设计、程序可视化等。

Kevin Wayne,康奈尔大学博士,普林斯顿大学计算机科学系高级讲师,研究方向包括算法的设计、分析和实现,特别是图和离散优化。

目录

第 1 章  基础

  • 1.1 基础编程模型
  • 1.1.1 Java 程序的基本结构
  • 1.1.2 原始数据类型与表达式
  • 1.1.3  语句
  • 1.1.4  简便记法
  • 1.1.5  数组
  • 1.1.6  静态方法
  • 1.1.7  API
  • 1.1.8  字符串
  • 1.1.9  输入输出
  • 1.1.10  二分查找
  • 1.1.11  展望
  • 1.2  数据抽象
  • 1.2.1  使用抽象数据类型
  • 1.2.2  抽象数据类型举例
  • 1.2.3  抽象数据类型的实现
  • 1.2.4  更多抽象数据类型的实现
  • 1.2.5  数据类型的设计
  • 1.3  背包、队列和栈
  • 1.3.1  API
  • 1.3.2  集合类数据类型的实现
  • 1.3.3  链表
  • 1.3.4  综述
  • 1.4  算法分析
  • 1.4.1  科学方法
  • 1.4.2  观察
  • 1.4.3  数学模型
  • 1.4.4  增长数量级的分类
  • 1.4.5  设计更快的算法
  • 1.4.6  倍率实验
  • 1.4.7  注意事项
  • 1.4.8  处理对于输入的依赖
  • 1.4.9  内存
  • 1.4.10  展望
  • 1.5  案例研究:union-find 算法
  • 1.5.1  动态连通性
  • 1.5.2  实现
  • 1.5.3  展望

第 2 章  排序

  • 2.1  初级排序算法
  • 2.1.1  游戏规则
  • 2.1.2  选择排序
  • 2.1.3  插入排序
  • 2.1.4  排序算法的可视化
  • 2.1.5  比较两种排序算法
  • 2.1.6  希尔排序
  • 2.2  归并排序
  • 2.2.1  原地归并的抽象方法
  • 2.2.2  自顶向下的归并排序
  • 2.2.3  自底向上的归并排序
  • 2.2.4  排序算法的复杂度
  • 2.3  快速排序
  • 2.3.1  基本算法
  • 2.3.2  性能特点
  • 2.3.3  算法改进
  • 2.4  优先队列
  • 2.4.1  API
  • 2.4.2  初级实现
  • 2.4.3  堆的定义
  • 2.4.4  堆的算法
  • 2.4.5  堆排序
  • 2.5  应用
  • 2.5.1  将各种数据排序
  • 2.5.2  我应该使用哪种排序算法
  • 2.5.3  问题的归约
  • 2.5.4  排序应用一览

第 3 章 查找

  • 3.1 符号表
  • 3.1.1 API
  • 3.1.2 有序符号表
  • 3.1.3 用例举例
  • 3.1.4 无序链表中的顺序查找
  • 3.1.5 有序数组中的二分查找
  • 3.1.6 对二分查找的分析
  • 3.1.7 预览
  • 3.2 二叉查找树
  • 3.2.1 基本实现
  • 3.2.2 分析
  • 3.2.3 有序性相关的方法与删除操作
  • 3.3 平衡查找树
  • 3.3.1 2-3 查找树
  • 3.3.2 红黑二叉查找树
  • 3.3.3 实现
  • 3.3.4 删除操作
  • 3.3.5 红黑树的性质
  • 3.4 散列表
  • 3.4.1 散列函数
  • 3.4.2 基于拉链法的散列表
  • 3.4.3 基于线性探测法的散列表
  • 3.4.4 调整数组大小
  • 3.4.5 内存使用
  • 3.5 应用
  • 3.5.1 我应该使用符号表的哪种实现
  • 3.5.2 集合的 API
  • 3.5.3 字典类用例
  • 3.5.4 索引类用例
  • 3.5.5 稀疏向量

第 4 章  图

  • 4.1  无向图
  • 4.1.1  术语表
  • 4.1.2  表示无向图的数据类型
  • 4.1.3  深度优先搜索
  • 4.1.4  寻找路径
  • 4.1.5  广度优先搜索
  • 4.1.6  连通分量
  • 4.1.7  符号图
  • 4.1.8  总结
  • 4.2  有向图
  • 4.2.1  术语
  • 4.2.2  有向图的数据类型
  • 4.2.3  有向图中的可达性
  • 4.2.4  环和有向无环图
  • 4.2.5  有向图中的强连通性
  • 4.2.6  总结
  • 4.3  最小生成树
  • 4.3.1  原理
  • 4.3.2  加权无向图的数据类型
  • 4.3.3  最小生成树的 API 和测试用例
  • 4.3.4  Prim 算法
  • 4.3.5  Prim 算法的即时实现
  • 4.3.6  Kruskal 算法
  • 4.3.7  展望
  • 4.4  最短路径
  • 4.4.1  最短路径的性质
  • 4.4.2  加权有向图的数据结构
  • 4.4.3  最短路径算法的理论基础
  • 4.4.4  Dijkstra 算法
  • 4.4.5  无环加权有向图中的最短路径算法
  • 4.4.6  一般加权有向图中的最短路径问题
  • 4.4.7  展望

第 5 章  字符串

  • 5.1  字符串排序
  • 5.1.1  键索引计数法
  • 5.1.2  低位优先的字符串排序
  • 5.1.3  高位优先的字符串排序
  • 5.1.4  三向字符串快速排序
  • 5.1.5  字符串排序算法的选择
  • 5.2  单词查找树
  • 5.2.1  单词查找树
  • 5.2.2  单词查找树的性质
  • 5.2.3  三向单词查找树
  • 5.2.4  三向单词查找树的性质
  • 5.2.5  应该使用字符串符号表的哪种实现
  • 5.3  子字符串查找
  • 5.3.1  历史简介
  • 5.3.2  暴力子字符串查找算法
  • 5.3.3  Knuth-Morris-Pratt 子字符串查找算法
  • 5.3.4  Boyer-Moore 字符串查找算法
  • 5.3.5  Rabin-Karp 指纹字符串查找算法
  • 5.3.6  总结
  • 5.4  正则表达式
  • 5.4.1  使用正则表达式描述模式
  • 5.4.2  缩略写法
  • 5.4.3  正则表达式的实际应用
  • 5.4.4  非确定有限状态自动机
  • 5.4.5  模拟 NFA 的运行
  • 5.4.6  构造与正则表达式对应的
  • 5.5  数据压缩
  • 5.5.1  游戏规则
  • 5.5.2  读写二进制数据
  • 5.5.3  局限
  • 5.5.4  热身运动:基因组
  • 5.5.5  游程编码
  • 5.5.6  霍夫曼压缩

第 6 章  背景

索引

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了