算法图解-----十种常用算法

本文介绍了10种常见的算法,包括二叉查找树、反向索引、傅里叶变换、并行算法、MapReduce、布隆过滤器与HyperLogLog、SHA算法、局部敏感散列、Diffie-Hellman密钥交换和线性规划。通过这些算法,可以理解搜索引擎原理、提高计算速度、进行分布式计算、数据过滤、安全验证、相似内容检测及密钥交换等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

10种算法
1、二叉查找树
节点:左子节点的值都比它小,而右子节点的值都比它大
插入后无需排序,

2、反向索引
搜索引擎的工作原理,创建一个散列表,键为“搜索词”,值为“包含搜索词的界面”;

3、傅里叶变换
“给它一杯冰沙,它能告诉你其中包含哪些成分”,例如:给定一首歌曲,傅里叶变换能够将其中的各种频率分离出来。使用傅里叶变换可创建类似于“酷狗”这样的音乐识别软件。

4、并行算法
为了提高算法的速度,我们需要让它们能够在多个内核中并行地执行。例如:对数组进行排序,在最佳情况下,排序算法的速度大致为O(nlongn)。但是在快速排序的并行版本所需的时间为O(n)。

并行算法设计的速度提升并非线性的,因此即便你的笔记本电脑装备了两个而不是一个内核,算法的速度也不可能提高一倍,其中的原因有两个:
a、并行性管理开销。假设你要对一个包含1000个元素的数组进行排序,如何在两个内核之间分配这项任务呢?如果让每个内核对其中500个元素进行排序,再将两个排好序的数组合并成一个有序数组,那么合并也是需要时间的。
b、负载均衡。假设你需要完成10个任务,因此你给每个内核都分配5个任务。但分配给内核A的任务都很容易,10秒钟就完成了,而分配给内核B的任务都很难,1分种才完成。这意味着有那么50秒,内核B在忙死忙活,而内核A去闲得很,你如何均匀地分配工作,让两个内核都一样忙呢?
要改善性能和可扩展性,并行算法可能是不错的选择!

5、MapReduce(Apache Hadoop)
分布式算法,可让算法在多台计算机上运行。
例如:你有一个数据库表,包含数十亿乃至数万亿行,需要对其执行复杂的SQL查询。在这种情况下,你不能使用MySQL,因为数据表的行数超过十亿后,它处理起来将很吃力。相反,你需要通过Hadoop来使用MapReduce!
分布式算法非常适合用于在短时间内完成海量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值