二分查找的区间到底是开还是闭?
在这两个月的时间里,我似乎没有产出任何的有关知识点的文章,大多数都是题解相关的内容。以至于许多人觉得 Macw07 “失踪”了。本文是我来到北美之后的第一篇知识点文章,请大家多多关照。
这次不讲难的知识点了,讲一个大家都熟悉的,但又非常令人抓毛的算法:二分查找和二分答案算法。
引言 Introduction
注意:本文仅针对了解过二分查找基本算法原理的用户群体,若您从未接触过或了解过该算法,请先学习基础的二分查找算法。
二分查找算法是大家一个再熟悉不过的算法了,二分查找算法可以在一个 有序数列 中高效地查找某个或多个特定的目标值。一般来说,二分查找的时间复杂度在 O ( log 2 N ) ) O(\log_2 N)) O(log2N)) 级别。二分算法非常适合在大数据集上实现快速查询。与此同时,除了基本的二分查找算法,它的许多变种也被广泛应用于各种场景,比如求最大值、最小值,甚至在复杂的数据结构中优化数据的查找性能。
许多同学肯定在学习完基本的二分查找后一直有一个疑问:我到底该如何设置 L L L 和 R R R 的区间闭合状态?什么时候需要输出 L L L 或 R R R,为什么有时候还需要 + 1 +1 +1? Mid \text{Mid} Mid 到底保存的是什么东西?etc.
事实上,区间开闭的变量定义 确实是一个核心且容易混淆的问题,在 CSP 考试中也常考此知识点,因此本文将重点围绕区间开闭的变量定义来展开。
二分查找的基本原理 Basic Principles of Binary Search
在深入讨论区间开闭之前,有必要回顾一下二分查找的基本原理。二分查找通过反复将搜索区间分成两半,逐步缩小目标值所在的范围,直到找到目标值或确定其不存在。具体步骤如下:
-
初始化:设定搜索区间的左右边界 L L L 和 R R R。
-
计算中点:计算中点 M = L + R − L 2 M = L + \dfrac{R - L}{2} M=L+2R−L。
-
比较
:将目标值与中点元素进行比较。
- 若相等,返回中点位置。
- 若目标值小于中点元素,缩小搜索区间至左半部分。
- 若目标值大于中点元素,缩小搜索区间至右半部分。
-
重复:重复上述步骤,直到找到目标值或搜索区间为空。
开区间/闭区间 Open Interval/Closed Interval
在文章开始,先了解一下区间的开闭性。
开区间
定义:开区间表示区间的端点 不包含在区间内,用小括号 ( ) () () 表示。
示例: ( 2 , 5 ) (2, 5) (2,5


4785

被折叠的 条评论
为什么被折叠?



