带你读《图解算法小抄》十五、搜索(1)

简介: 带你读《图解算法小抄》十五、搜索(1)

十五、搜索

访问 www.coding-time.cn 阅读原文动画效果,体验更佳。

1. 二分查找

在计算机科学中,二分查找(Binary Search),也称为折半查找、对数查找或二分法,是一种用于在有序数组中查找目标值位置的搜索算法。二分查找将目标值与数组的中间元素进行比较;如果它们不相等,则可以排除目标值不可能存在的一半,并在剩余的一半上继续搜索,直到找到目标值或搜索结束。如果搜索结束时剩余的一半为空,则表示数组中不存在目标值。

 

image.png

 

1复杂度

时间复杂度:O(log(n)) - 因为每次迭代都将搜索区域分成两半。

2完整实现

function binarySearch(array, target) {
  let left = 0;
  let right = array.length - 1;
  while (left <= right) {
    const mid = left + Math.floor((right - left) / 2);
    if (array[mid] === target) {
      return mid; // 找到目标元素,返回索引
    } else if (array[mid] < target) {
      left = mid + 1; // 目标元素在右侧,调整左边界
    } else {
      right = mid - 1; // 目标元素在左侧,调整右边界
    }
  }
  return -1; // 未找到目标元素}

3参考资料

  • 维基百科
  • YouTube

2.插值查找

插值查找(Interpolation Search)是一种用于在已按键(键值)排序的数组中搜索键的算法。

 

例如,我们有一个排序的数组 arr[],其中包含 n 个均匀分布的值,并且我们需要编写一个函数在数组中搜索特定元素 x

 

线性搜索的时间复杂度为 O(n),跳跃搜索的时间复杂度为 O(√n),二分查找的时间复杂度为 O(logn)

 

插值查找是对二分查找的改进,适用于在已排序数组中元素的分布是“均匀”的情况。二分查找总是检查中间元素。而插值查找根据所搜索的键的值可能接近的位置进行搜索。例如,如果键的值更接近最后一个元素,则插值查找可能从末尾开始搜索。

 

要找到要搜索的位置,它使用以下公式:

 

// 这个公式的思想是,当要搜索的元素更接近 arr[hi] 时,返回较大的 pos 值。
// 当更接近 arr[lo] 时,返回较小的值。
pos = lo + ((x - arr[lo]) * (hi - lo) / (arr[hi] - arr[lo]))
arr[] - 需要进行搜索的数组
x - 要搜索的元素
lo - arr[] 中的起始索引
hi - arr[] 中的结束索引

1复杂度

时间复杂度:O(log(log(n)))


带你读《图解算法小抄》十五、搜索(2)https://developer.aliyun.com/article/1348121?groupCode=tech_library

相关文章
|
20天前
|
算法 机器学习/深度学习 索引
【算法设计与分析】——搜索算法
【算法设计与分析】——搜索算法
50 1
|
20天前
|
算法 程序员 数据处理
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
|
20天前
|
算法
【算法系列篇】递归、搜索和回溯(四)
【算法系列篇】递归、搜索和回溯(四)
|
10天前
|
索引
浅谈两个重要的搜索算法
【5月更文挑战第15天】线性搜索从数组一端按顺序遍历,直到找到目标元素,平均和最坏情况的时间复杂度均为O(N)。二分查找适用于排序数组,通过比较中间元素快速定位目标,最佳、平均和最坏情况的时间复杂度都是O(logN)。
17 6
|
13天前
|
算法
【软件设计师】常见的算法设计方法——穷举搜索法
【软件设计师】常见的算法设计方法——穷举搜索法
|
20天前
|
机器学习/深度学习 存储 人工智能
图搜索算法详解
【5月更文挑战第11天】本文介绍了图搜索算法的基础知识,包括深度优先搜索(DFS)、广度优先搜索(BFS)和启发式搜索(如A*算法)。讨论了图搜索中的常见问题、易错点及避免方法,并提供了BFS和A*的Python代码示例。文章强调了正确标记节点、边界条件检查、测试与调试以及选择合适搜索策略的重要性。最后,提到了图搜索在路径规划、游戏AI和网络路由等领域的应用,并概述了性能优化策略。
20 3
|
20天前
|
机器学习/深度学习 存储 算法
数据结构与算法 动态规划(启发式搜索、遗传算法、强化学习待完善)
数据结构与算法 动态规划(启发式搜索、遗传算法、强化学习待完善)
18 1
|
20天前
|
算法 搜索推荐 索引
数据结构与算法 搜索(下)
数据结构与算法 搜索(下)
16 0
|
20天前
|
缓存 算法 搜索推荐
数据结构与算法 搜索(上)
数据结构与算法 搜索(上)
11 1
|
20天前
|
数据采集 存储 算法
数据结构与算法 搜索
数据结构与算法 搜索
10 1