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

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

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

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

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

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

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

K-Means算法是一种常用的聚类算法,用于将数据集分成多个类别。K-Means算法的基本思想是将数据集中的点分为K个簇,其中每个簇都具有相似的特征。 下面是基于质心的K-Means算法的图解: 1. 随机初始化K个质心,其中每个质心是一个向量,表示一个簇的中心点。 2. 对每个数据点,计算其到每个质心的距离,并将其分配到距离最近的质心所代表的簇中。 3. 对每个簇,计算其所有点的平均值,并将该平均值作为新的质心。 4. 重复步骤2和步骤3,直到质心不再改变或达到预定的迭代次数。 下面是一个简单的K-Means算法示例: 假设我们有如下数据集: ![image.png](attachment:image.png) 我们希望将这些数据分成两个簇。首先,我们随机初始化两个质心,如下图所示: ![image-2.png](attachment:image-2.png) 然后,我们计算每个数据点到每个质心的距离,并将它们分配到距离最近的质心所代表的簇中。在这个例子中,我们将数据点1、2、3分配到簇1中,将数据点4、5、6分配到簇2中。下图显示了这种分配方式: ![image-3.png](attachment:image-3.png) 接下来,我们计算每个簇的平均值,并将该平均值作为新的质心。在这个例子中,我们将簇1的平均值作为新的质心1,将簇2的平均值作为新的质心2。下图显示了这个过程: ![image-4.png](attachment:image-4.png) 然后,我们重复步骤2和步骤3,直到质心不再改变或达到预定的迭代次数。在这个例子中,我们得到了如下的最终结果: ![image-5.png](attachment:image-5.png) 可以看到,K-Means算法将数据集中的点成功分成了两个簇。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值