千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 线性、二进制和散列搜索

线性、二进制和散列搜索

来源:千锋教育
发布人:syq
时间: 2022-10-08 16:30:23 1665217823

  在脚本中搜索算法

  通常,当我们需要从任何数据存储中查找数据时,有三种类型的搜索算法。它们是线性搜索、二进制搜索和哈希搜索。搜索意味着从数据集中查找数据记录,该数据集可以是任何地图或项目列表。每种搜索算法在使用它甚至将其应用于程序之前都有某些要求:

线性、二进制和散列搜索

  线性搜索 — 线性搜索需要应用于未排序的 Array,并且根据将每个元素与要搜索的目标进行比较来查找

  二进制搜索 — 如果数组从相同的键或相同的方向排序,则二进制搜索是从数组中搜索元素的优化方法

  如果我们想在 Hashmap 上进行搜索,我们将使用哈希算法来存储哈希的键并直接将其与值映射,而不是在 Array 中搜索。此算法的时间复杂度为 O(1),因为程序已经知道具有相同键的值的哈希或索引

  线性搜索

  在 JavaScript 中,我们在数组原型中有一个方法,该方法使用线性搜索来查找元素。让我们创建 find 的定义,以了解线性算法的工作原理find

21

  下面是线性搜索的示例,其中我们首先在 Array 上创建了原型方法,并在运行提供的回调方法时迭代到所有元素,如果回调成功,则返回完整的对象

  此算法的最坏情况是,目标元素将位于最后一个索引上,使其在 N 次时运行。因此,时间复杂度为 O(N),其中 N 是数组中的项数

  二进制搜索

  接下来是二进制搜索,但请记住,二进制搜索仅适用于排序的数组,因此首先,我们需要确保数组已排序

  对象数组的注释:

  在 JavaScript 中处理对象数组时,应使用要搜索的键对数组进行排序。例如,如果要在数组的对象中将名称作为属性之一进行搜索,则数组应仅根据名称字段进行格式化,而不是使用对象数组中的任何其他字段进行格式化

  算法

  在二进制搜索中,由于数组是按某种顺序排序的,我们可以使用这意味着我们知道应该去哪个路径来搜索目标元素。让我们举个例子来了解更多

22

  如您所见,数组按 ASC 顺序对奇数进行排序。因此,为了慷慨,我们首先取一个中间元素(你可以取任何数字,但为了获得最准确的结果,你应该总是选择中间元素)

  下一步是将目标元素与中间元素进行比较

23

  我们也可以使用 end + start / 2,但如果数组大小很大,这将引发内存错误,因此最好使用上述方法来计算中间索引

  如果我们找到元素,我们将返回中间元素,否则我们将检查

24

  现在,您将基于上述条件获得一个新数组,然后我们需要重新执行相同的逻辑,直到数组大小变为一,并且我们找到元素

25

  程序

  讨论够了,让我们写一些代码,看看我们如何使它工作

  我们将使用此集合来创建程序并观察数组是否按分数参数排序,我也想使用相同的参数进行搜索

26

27

  在这里,我们维护数组的开始和结束,我们正在操作开始和结束以创建替代数组,同时检查目标是否匹配。

  就是这样。您的二进制搜索已准备好满足您的目的。

  二进制搜索的时间复杂度为 O(log n)。让我简要介绍如何计算其时间复杂度

  计算时间复杂度

  在计算之前,让我们看看需要对变量运行特定语句的次数

  首先,执行的语句数在 2^n 部分中减少

28

  现在,让我们为二进制搜索设计公式,因为它们中的每一个都是2的乘数,我们可以很容易地说

29

  让我们在两边采取对账单

30

  我们有一个对数公式

31

  所以新的等式将是

32

  这就是您计算二进制搜索的时间复杂度的方式。计算时间复杂度本身就是一个需要讨论的庞大话题,但我们只用了其中的一小部分来展示它是如何完成的。

  散列法

  哈希算法非常干净,仅特定于哈希映射。由于哈希图以知道条目键的模式存储数据,因此从中搜索是一个单一的调用。一个简单的例子是

33

  哈希的时间复杂度为 O(1),因为响应操作不受哈希保存的项目数的影响

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT