巴尔加瓦算法图解:算法运用(上)

目录

如果能将用户名插入到数组的正确位置就好了,这样就无需在插入后再排序。为此,有人设计了一种名为二叉查找树(binary search tree)的数据结构。

  • 每个node的children 都不大于两个。
  • 对于其中的每个节点,左子节点的值都比它小,而右子节点的值都比它大

反向索引

反向索引是一种数据结构,用于加快信息检索系统中的搜索速度。通常在搜索引擎和数据库系统中使用。反向索引将文档中的关键词与它们出现的位置建立关联,以便在搜索时可以快速地找到包含指定关键词的文档。这种索引结构相比于简单地扫描整个文档集合来搜索目标关键词,具有更高的效率和速度。

傅立叶变换

傅立叶变换是一种数学方法,用于将一个函数(通常是一个时域信号)转换成频域表示。这种转换使得我们可以将信号分解成不同频率的成分,从而更好地理解信号的频谱特性。在实际应用中,傅立叶变换被广泛用于信号处理、图像处理、通信系统等领域,以便分析和处理频域信息。

如果能够将歌曲分解为不同的频率,就可强化你关心的部分,如强化低音并隐藏高音。傅里叶变换非常适合用于处理信号,可使用它来压缩音乐。为此,首先需要将音频文件分解为音符。傅里叶变换能够准确地指出各个音符对整个歌曲的贡献,让你能够将不重要的音符删除。这就是MP3格式的工作原理!数字信号并非只有音乐一种类型。JPG也是一种压缩格式,也采用了刚才说的工作原理。傅里叶变换还被用来地震预测和DNA分析。

并行算法

❑ 并行性管理开销。假设你要对一个包含1000个元素的数组进行排序,如何在两个内核之间分配这项任务呢?如果让每个内核对其中500个元素进行排序,再将两个排好序的数组合并成一个有序数组,那么合并也是需要时间的。

❑ 负载均衡。假设你需要完成10个任务,因此你给每个内核都分配5个任务。但分配给内核A的任务都很容易,10秒钟就完成了,而分配给内核B的任务都很难,1分钟才完成。这意味着有那么50秒,内核B在忙死忙活,而内核A却闲得很!你如何均匀地分配工作,让两个内核都一样忙呢?要改善性能和可扩展性,并行算法可能是不错的选择!

MapReduce

MapReduce是一种流行的分布式算法,你可通过流行的开源工具Apache Hadoop来使用它。

假设你有一个数据库表,包含数十亿乃至数万亿行,需要对其执行复杂的SQL查询。在这种情况下,你不能使用MySQL,因为数据表的行数超过数十亿后,它处理起来将很吃力。相反,你需要通过Hadoop来使用MapReduce!又假设你需要处理一个很长的清单,其中包含100万个职位,而每个职位处理起来需要10秒。如果使用一台计算机来处理,将耗时数月!如果使用100台计算机来处理,可能几天就能完工。分布式算法非常适合用于在短时间内完成海量工作,其中的MapReduce基于两个简单的理念:映射(map)函数和归并(reduce)函数。

函数

映射函数很简单,它接受一个数组,并对其中的每个元素执行同样的处理。例如,下面的映射函数将数组的每个元素翻倍。

归并函数可能令人迷惑,其理念是将很多项归并为一项。映射是将一个数组转换为另一个数组。而归并是将一个数组转换为一个元素。(把12345,转化成15)

相关推荐
你的微笑,乱了夏天4 分钟前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺15 分钟前
分布式系统架构:服务容错
数据库·架构
XH华19 分钟前
初识C语言之二维数组(下)
c语言·算法
南宫生41 分钟前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
不想当程序猿_1 小时前
【蓝桥杯每日一题】求和——前缀和
算法·前缀和·蓝桥杯
落魄君子1 小时前
GA-BP分类-遗传算法(Genetic Algorithm)和反向传播算法(Backpropagation)
算法·分类·数据挖掘
菜鸡中的奋斗鸡→挣扎鸡1 小时前
滑动窗口 + 算法复习
数据结构·算法
独行soc1 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
Lenyiin1 小时前
第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ
c++·算法·leetcode·周赛·lenyiin
郭wes代码1 小时前
Cmd命令大全(万字详细版)
python·算法·小程序