二分搜索算法:函数、收益、时间和空间复杂度

已发表: 2020-09-17

目录

介绍

在任何计算系统中,搜索都是需要开发的最关键的功能之一。 搜索技术用于文件检索、索引和许多其他应用程序。 有许多可用的搜索技术。 其中之一是二进制搜索技术。

二分搜索算法工作原理是在每次迭代时忽略列表的一半。 它继续拆分列表,直到在给定列表中找到它正在寻找的值。 二分搜索算法是对简单线性搜索算法快速升级。

无需编码经验。 360° 职业支持。 来自 IIIT-B 和 upGrad 的机器学习和人工智能 PG 文凭。

二分搜索算法的工作

首先要注意的是,二进制搜索算法总是在排序列表上工作。 因此,第一个合乎逻辑的步骤是对提供的列表进行排序。 排序后,将列表的中位数与所需值进行检查。

  • 如果期望值等于中心索引的值,则索引作为答案返回。
  • 如果目标值低于列表的中心索引的交易,则忽略列表的右侧。
  • 如果期望值大于中心索引的值,则丢弃左半部分。
  • 然后在短列表上重复该过程,直到找到目标值。

示例 #1

让我们用一个例子来看看这个算法。 假设有一个包含以下数字的列表:

1、15、23、7、6、14、8、3、27

让我们将所需的值设为 27。列表中的元素总数为 9。

第一步是对列表进行排序。 排序后,列表将如下所示:

1、3、6、7、8、14、15、23、27

由于列表中的元素数量为 9,因此中心索引为 5。 索引 5 处的值为 8。将所需的值 27 与值 8 进行比较。首先,检查该值是否等于 8。 如果是,则返回索引并退出。

由于 27 大于 8,我们将忽略左侧部分,只遍历列表的右侧。 要遍历的新列表是:

14、15、23、27

注意:在实践中,列表不会被截断。 只是缩小了观察范围。 因此,不应将“新列表”与制作新列表或缩短原始列表相混淆。 虽然它可以用一个新的列表来实现,但有两个问题。 首先,会有内存开销。 每个新列表都会增加空间复杂度。 其次,每次迭代都需要跟踪原始索引。

新的中心索引可以作为第二个或第三个元素,具体取决于实现。 在这里,我们将把第三个元素视为中心。 将值 23 与值 27 进行比较。由于值大于中心值,我们将丢弃左半部分。

要遍历的列表是:

27

由于列表仅包含一个元素,因此它被认为是中心元素。 因此,我们将期望值与 27 进行比较。当它们匹配时,我们返回原始列表中的索引值 27。

示例 #2

在同一个列表中,让我们假设所需的值为 2。

首先,将中心值 8 与 2 进行比较。由于期望值小于中心值,我们将关注点缩小到列表的左侧。

新的遍历将包括:

1、3、6、7

让我们将中心元素作为第二个元素。 将期望值 2 与 3 进行比较。由于值仍然较小,我们再次将焦点缩小到列表的左侧。

新的遍历将包括:

1

由于遍历列表只有一个元素,因此该值直接与剩余元素进行比较。 我们看到这些值不匹配。 因此,我们使用错误消息跳出循环:找到值

数据科学高级认证、250 多个招聘合作伙伴、300 多个学习小时、0% EMI

时间和空间复杂度

二分查找算法的时间复杂度为 O(log n)。 当中心索引直接匹配所需值时,最佳情况的时间复杂度将是 O(1)。 最坏的情况可能是列表两端的值或不在列表中的值。

二分查找算法的空间复杂度取决于算法的实现。 有两种实现方式:

  1. 迭代法
  2. 递归方法

两种方法完全相同,但在实现上有两个不同之处。 首先,递归方法中没有循环。 其次,它不是将新值传递给循环的下一次迭代,而是将它们传递给下一次递归。 在迭代法中,可以通过循环条件来控制迭代次数,而在递归法中,以最大值和最小值作为边界条件。

在迭代方法中,空间复杂度为 O(1)。 而在递归方法中,空间复杂度为 O(log n)。

好处

  • 二分搜索算法一种实现起来相当简单的搜索算法。
  • 这是对线性搜索的显着改进,与一些更难实现的搜索算法相比,它的性能几乎相同。
  • 二进制搜索算法在每次迭代时列表分成两半,而不是按顺序梳理列表。 在大型列表中,此方法非常有用。

结帐:决策树分类:您需要知道的一切

结论

二分搜索算法是计算领域中广泛使用的算法 它是一种胖而准确的搜索算法,可以在大小数据集上都很好地工作。 二分搜索算法一种简单且可靠的算法来实现。 通过时间和空间分析,使用这种特殊技术的好处是显而易见的。

如果您想了解数据科学,请查看 IIIT-B 和 upGrad 的数据科学 PG 文凭,该文凭专为在职专业人士而设,提供 10 多个案例研究和项目、实用的实践研讨会、与行业专家的指导、1-与行业导师面对面交流,400 多个小时的学习和顶级公司的工作协助。

线性搜索是否优于二分搜索?

如果你只需要搜索一次,如果数据最初是未排序的,线性搜索肯定会比排序后二进制搜索更快。 另一方面,二分搜索被认为是一种比线性搜索快得多的搜索方法。 二进制搜索允许您一次删除一半的剩余项目,而线性搜索将逐个遍历每个元素。

插值搜索与二分搜索有什么区别?

插值搜索是一种类似于二分搜索的技术,用于在已排序的数组中查找指定的目标值。 这类似于人们在电话簿中搜索某个姓名的方式,目标值用于对电话簿的内容进行排序。 要检查,二分搜索总是会到达中心元素。 另一方面,插值搜索可能会导致不同的位置,具体取决于正在搜索的键的值。 例如,如果键的值更接近最终元素,则插值搜索更有可能从末尾开始。

进行递归二进制搜索还是迭代二进制搜索更好?

二分搜索的递归版本的空间复杂度为 O(log N),而迭代版本的空间复杂度为 O(log N) (1)。 结果,虽然递归版本易于构建,但迭代形式更有效。