章节目录:
- 算法简介
- 为阅读后续内容打下基础
- 编写第一种查找算法—二分查找
- 学习如何谈论算法的运行时间—大O表示法。
- 了解一种常用的算法设计方法—递归
- 选择排序
- 学习两种最基本的数据结构—数组和链表,他们无处不在。第一张是用了数组,其他个章几乎也都酱用到数组。数组是个重要的主题,一定要高度重视!但在有些情况下,使用链表比使用数字更合适。本章阐述数组和链表的优缺点,让你根据要实现的算法选择合适的一个。
- 学习第一种排序肃反啊。很多算法仅在数据经过排序后才管用。还记得二分查找吗?它只能用于有序元素列表。
- 递归
- 学习递归。递归是很多算法都使用的一种编程方法。是理解本书后续内容的关键。
- 学习如何讲问题分成基线条件和递归条件。第四章讲介绍的分而治之策略使用这种简单的概念来解决棘手的问题。
- 快速排序
- 学习分而治之。有时候,你可能遇到使用任何已知的算法都无法解决的问题。优秀的算法工程师遇到这种问题时,不会就此放弃,而是尝试使用掌握的各种问题的解决方案来找出解决方案。分而治之是你想学习的第一种通用的问题解决方法。
- 学习快速排序—一种常用的优雅的排序算法。快速排序使用分而治之的策略。
- 散列表
- 学习散列表—最有用的基本数据结构之一。散列表用途广泛,本章将介绍其常见的用途。
- 学习散列表的内部机制:实现、冲突和散列函数。这将帮助你理解如何分析散列表的性能。
- 广度优先算法
- 学习使用新的数据结构来创建网络模型
- 学习广度优先搜索,你可对使用这种算法回答诸如“到X的最短路径是什么”等问题。
- 学习有向图和无向图。
- 学习拓扑排序,这种排序算法指出了节点之间的依赖关系。
- 狄克斯特拉算法
- 继续图的讨论,介绍加权图—提高或降低某些边的权重。
- 介绍狄克斯特拉算法,让你能够找出加权图中前往X的最短路径。
- 介绍图中的环,它导致狄克斯特拉算法不管用
- 贪婪算法
- 学习如何处理不可能完成的任务:没有快速算法的问题(NP完全问题)
- 学习识别NP完全问题,以面浪费时间去寻找他们的快速算法。
- 学习近似算法,使用他们可快速找到NP完全问题的近似解。
- 学习贪婪策略一种非常简单的问题解决策略。
- 动态规划
- 学习动态规划,这是一种解决棘手问题的方法,它将问题分解成小问题,并先着手解决这些小问题。
- 学习如何设计问题的动态规划方案。
- K最近邻算法
- 学习使用K最近邻算法创建分类系统。
- 学习特征抽取。
- 学习回归,即预测数值,如明天的股价或用户对某部电影的喜欢程度。
- 学习K最近邻算法的应用案例和局限性。
- 接下来如何做:其他10个算法
- 树:B树,红黑树,堆,伸展树。
- 反向索引:搜索发动机的工作原理。
- 傅立叶变换:
- 给定一首歌,傅立叶变换能将其中的歌总频率分离出来。
- 应用于MP3格式压缩,歌曲识别
- 并行算法:处理海量数据时多核运算
- MapReduce:分布式算法
- 映射函数:它接受一个数组,并对其中的每个元素执行同样的处理
- 归并函数:理念是将很多项归并为一项。
- 布隆过滤器和HyperLogLog:
- 适用场景:reddit和Google面对上亿的网页索引
- 布隆过滤器是一宗概率性数据结构,它提供的答案有可能不对,但很可能是正确的。
- 布隆过滤器优点是占用的存储空间很少。
- HyperLogLog应用场景:存储amazon用户每天游览的不同商品的数量,这是一个很大的量级
- SHA算法:给定一个字符串,SHA返回其散列值。
- 应用场景:检查密码
- 局部敏感的散列算法:同sha算法,只是只要一个字符改,生成的散列值就完全不一样。
- DIffie_hellman秘钥交换:公钥和私钥。
- 线性规划:用于在给定约束条件下最大限度的改善指定的指标。
- 使用场景:政客拉选票例子
这本书适合对象:
- 算法小白入门
- 算法爱好者入门
- 计算机小白
一句话总结:
介绍了常用的10种算法及其应用场景,很友好的算法入门书。