仅用于记录学习,欢迎批评指正,大神勿喷
系列文章目录
《算法图解》总结第 1 章:二分查找、大O表示法;
《算法图解》总结第 2 章:数组和链表,选择排序;
《算法图解》总结第 3 章:while循环、递归、栈;
《算法图解》总结第 4 章:分而治之、快速排序;
《算法图解》总结第 5 章:散列表;
《算法图解》总结第 6 章:广度优先搜索;
《算法图解》总结第 7 章:狄克斯特拉算法;
《算法图解》总结第 8 章:贪婪算法
《算法图解》总结第 9 章:动态规划
《算法图解》总结第 10 章:K最近邻算法
《算法图解》总结第 11 章:十种算法简介
文章目录
十种算法简介
一、二叉查找树
二叉查找树的数据结构类似于下图:
对于其中的每个节点,左子节点的值都比它小,右子节点的值都比它大。假设我们要找Maggle,首先检查根节点David,Maggle在David的后面,即比David大,因此往右边找,接下来遇到节点Manning,Maggle在Manning的前面,即比Manning小,因此往左边找,此时找到了Maggle。
二叉查找树的优点:插入和删除操作的速度很快。
二叉查找树的缺点:有序数组比二叉查找树查找速度更快;不能随机访问;如果二叉树不平衡,会导致性能不佳。
如果对数据库或高级数据库感兴趣,可研究以下数据结构:B树,红黑树,堆,伸展树。
二、反向索引
一个散列表,将单词映射到包含它的页面,这种数据结构被称为反向索引,常用于创建搜索引擎。
三、傅立叶变换
傅立叶变换是一个绝妙、优雅且应用广泛的算法。傅立叶变换的绝佳比喻是:给它一杯冰沙,它能告诉你其中包含哪些成分。傅立叶变换非常适合于处理信号,可用它来压缩音乐,还可被用来地震预测和DNA分析。使用傅立叶变换还可创建音乐识别软件。
四、并行算法
并行算法需要让多个内核并行执行,算法速度提升迅速,原因有两个:并行性管理开销和负载均衡。要改善性能和可扩展性,并行算法是不错的选择。并行算法 设计起来困难,要确保它们能够正确地工作并实现期望的速度提升也很难。
五、MapReduce
MapReduce是一种流行的分布式算法(需要数百个内核,让算法在多台计算机上运行,非常适合用于在短时间内完成海量工作),可通过流行的开源工具Apache Hadoop来使用它。MapReduce基于两个简单的理念:映射(map)函数和归并(reduce)函数。
映射函数:
映射函数接受一个数组,并对其中的每个元素执行同样的处理,将一个数组转换为另一个数组。
案例:
l1 = [1, 2, 3, 4]
# 开方
print(list(map(lambda x: x ** 2, l1)))
# 相加
print(list(map(lambda x, y: x + y, [345, 3439, 34], [353, 345])))
输出结果:
[1, 4, 9, 16]
[698, 3784]
归并函数:
归并函数是将很多项归并为一项。
print(list(reduce(lambda x, y: x + y, l1)))
输出结果:
10
六、布隆过滤器和HyperLogLog
布隆过滤器是一种概率型数据结构,它提供的答案有可能不对,但很可能是正确的。为判断网页以前是否已搜集,可不使用散列表,而使用布隆过滤器,可能出现错报的情况,即可能指出“这个网站已搜集”实际上并没有搜集,但是不可能出现漏报的情况,即如果布隆过滤器说“这个网站未搜集”,就肯定未搜集。
HyperLogLog是一种类似于布隆过滤器的算法,它近似地计算集合中的不同的元素数,不能给出准确的答案,但也八九不离十,而占用的内存空间却少很多。
七、SHA算法
SHA算法称为安全散列算法函数,给定一个字符串,SHA返回其散列值。SHA是一个散列函数,它生成一个散列值—一个较短的字符串。用于创建散列表的散列函数根据字符串生成数组索引,而SHA根据字符串生成另一个字符串。可使用SHA来判断两个文件是否相同,这在比较大型文件时很有用,SHA还能让我们在不知道原始字符串的情况下对其进行比较。SHA被广泛用于计算密码的散列值,这种散列算法是单向的,无法推断出原始字符串。
八、局部敏感的散列算法
SHA算法是局部不敏感的,希望散列函数是局部敏感的,可使用Simhash。如果对字符串做细微的修改,Simhash生成的散列值也只存在细微的差别。需要检查两项内容的相似度时,Simhash很有用。
九、Diffie-Hellman密钥交换
Diffie-Hellman用于对信息的加密,它使用两个密钥:公钥和私钥,公钥是公开的,可将其发布到网上。有人要向你发送消息时,他使用公钥对其进行加密,加密后的消息只有使用私钥才能解答,只要你知道私钥,就能解密消息。
十、线性规划
线性规划用于在给定约束条件下最大限度地改善指定的指标。线性规划使用Simplex算法,是最优化算法。