数据结构与算法(Dart)之二分查找(十七)

二分查找被定义为一种在排序数组中使用的查找算法重复将搜索间隔一分为二。二分查找的思想是利用数组已排序的信息,将时间复杂度降低到O(log N)。

应用二分查找算法:

  • 数据结构必须是有序的。
  • 访问数据结构的任何元素都需要恒定的时间。

算法步骤:

  • 通过查找中间索引mid将查找空间分为两半。
  • 将查找空间的中间元素与目标元素进行比较。
  • 如果在中间元素找到目标元素,则过程终止。
  • 如果在中间元素没有找到目标元素,则选择哪一半将用作下一个查找空间。
    • 如果键小于中间元素,则使用左侧进行下一步查找。
    • 如果键大于中间元素,则使用右侧进行下一步查找。
  • 这个过程一直持续到找到目标元素或者总查找空间耗尽为止。
ini 复制代码
/// 迭代二分查找
int binarySearch(arr, n, x) {
  int l = 0;
  int r = arr.length - 1;
  int mid = 0;
  while (r >= l) {
    mid = l + (int.tryParse("${(r - l) / 2}") ?? 0);

    if (arr[mid] == x) {
      return mid;
    }

    if (arr[mid] > x) {
      r = mid - 1;
    } else {
      l = mid + 1;
    }
  }
  return -1;
}

void main() {
  List<int> arr = [2, 3, 8, 10, 90];
  int x = 10;
  int n = arr.length;

  int result = binarySearch(arr, n, x);

  (result == -1)
      ? print("Element is not present in array")
      : print("Element is present at index: " + '$result');
}

时间复杂度:

scss 复制代码
-   最佳情况:O(1)
-   平均情况:O(log N)
-   最坏情况:O(log N)

辅助空间:O(1),如果考虑递归调用栈则辅助空间为O(logN)。

二分查找的优点:

  • 二分查找比线性查找更快,特别是对于大型数组。
  • 比具有类似时间复杂度的其他查找算法(例如插值查找或指数查找)更有效。
  • 二分查找非常适合查找存储在外部存储器(例如硬盘驱动器或云中)中的大型数据集。

二分查找的缺点:

  • 数组应该是排序的。
  • 二分查找要求将要查找的数据结构存储在连续的内存位置中。
  • 二分查找要求数组的元素是可比较的,这意味着它们必须能够排序。

二分查找的应用:

  • 二分查找可以用作机器学习中使用的更复杂算法的构建块,例如训练神经网络或查找模型的最佳超参数的算法。
  • 它可用于计算机图形学中的查找,例如光线追踪或纹理映射的算法。
  • 它可用于查找数据库。

参考资料

Binary Search -- Data Structure and Algorithm Tutorials

Python 数据结构与算法详解

相关推荐
倒头就睡的小比特4 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼4 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光4 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark4 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her14 天前
并查集-听课笔记
笔记·算法·并查集
码流子4 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven4 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark4 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218614 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法