《算法图解》总结第 11 章:十种算法简介

仅用于记录学习,欢迎批评指正,大神勿喷

系列文章目录

《算法图解》总结第 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算法,是最优化算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值