在二分查找中,计算机如何选择中点以及何时只剩下两个元素
In binary search, how does computer choose mid point and when there is only two elements left
我已经阅读了一些关于此事的 Whosebug 问题和其他博客。
他们中的大多数解释使用以下方法选择中点:
1. low + (high - low)/2
2. (low + high)/2, round down to integer.
来自 and https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search
None 其中非常有道理。
假设我有一个列表
lst = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91]
使用 1.midpoint = 46.5 并使用 2.midpoint = 50.5,四舍五入为 50。
两个中点都不在我的列表中。
再者当只有2个元素时,选择哪一个作为中点?
二分查找low/high引用索引而不是数组值。
所以在你的例子中 index 是 (0+9)/2=4.
如果长度为 2,你将得到 mid 索引 0,右边部分将有一个元素,左边为空(或者包含唯一的第 0 个元素,如果 mid 不单独处理)。
low
和 high
变量不引用列表或数组的元素。它们引用列表或数组的索引。因此,中间元素不会由 low + (high - low)/2
或 (low + high)/2
(向下舍入为整数)给出,而是由 lst[low + (high - low)/2]
或 lst[(low + high)/2]
给出
low
和 high
引用列表的索引而不是它们的值
如果有两个元素,它将采用 low
和 high
,它们分别是 0 和 1,然后执行 low + (high - low)/2
,这将等于 0 + (1 - 0)/2
这给了我们 0.5
取决于你的算法你可以四舍五入或向下舍入,因为你选择了向下舍入我们有一个值 0
这将是中间点的索引将被选中
我已经阅读了一些关于此事的 Whosebug 问题和其他博客。
他们中的大多数解释使用以下方法选择中点:
1. low + (high - low)/2
2. (low + high)/2, round down to integer.
来自
None 其中非常有道理。
假设我有一个列表
lst = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91]
使用 1.midpoint = 46.5 并使用 2.midpoint = 50.5,四舍五入为 50。
两个中点都不在我的列表中。
再者当只有2个元素时,选择哪一个作为中点?
二分查找low/high引用索引而不是数组值。
所以在你的例子中 index 是 (0+9)/2=4.
如果长度为 2,你将得到 mid 索引 0,右边部分将有一个元素,左边为空(或者包含唯一的第 0 个元素,如果 mid 不单独处理)。
low
和 high
变量不引用列表或数组的元素。它们引用列表或数组的索引。因此,中间元素不会由 low + (high - low)/2
或 (low + high)/2
(向下舍入为整数)给出,而是由 lst[low + (high - low)/2]
或 lst[(low + high)/2]
low
和high
引用列表的索引而不是它们的值如果有两个元素,它将采用
low
和high
,它们分别是 0 和 1,然后执行low + (high - low)/2
,这将等于0 + (1 - 0)/2
这给了我们0.5
取决于你的算法你可以四舍五入或向下舍入,因为你选择了向下舍入我们有一个值0
这将是中间点的索引将被选中