【问题标题】:Binary Search Question Please explain answer to me二进制搜索问题请向我解释答案
【发布时间】:2022-12-08 01:04:24
【问题描述】:

在二进制搜索期间,当目标是: 数组 4 8 12 14 20 24 中的哪些条目与目标进行比较:

一个。 2个

b. 8个

C。 15

回答:

    For the target 2 - 12 and 4 are compared to the target
    
    For the target 8 - 12,4 and 8 are compared to the target.

    For the target 15 - 12,20 and 14 are compared to the target.

我对这个问题的答案很困惑。谁能给我解释一下?例如,对于目标 2,为什么将 12 和 4 与目标进行比较而不是 12,4 和 8。为什么跳过 8?非常感谢!

【问题讨论】:

  • 12,4 是范围。
  • “为什么将 12 和 4 与目标进行比较,而不是 12,4 和 8” 如果代码将 2 与 4 进行比较,发现 2 小于 4,为什么要与 a 进行比较价值?
  • @Spectric:不,不是。据我了解,这是执行的一组比较。 (不可否认,这个问题似乎在中点处理方面假设了二进制搜索的特定实现......)
  • 虽然最后一个答案在我看来是错误的——它应该是 12、20 和 14。(当输入数据没有重复项时,一个好的二进制搜索实现永远不会重复比较。)
  • 但如果 12,4 是范围,那么为什么目标 8 是 12,4 和 8?为什么包括8?对于目标 15,为什么将 12 包括在内,而不是将 14,20 和 24 与目标 15 进行比较?

标签: java binary-search


【解决方案1】:

在二进制搜索中,算法首先将目标值与数组中的中间元素进行比较。如果目标值小于中间元素,则算法在数组的左半部分(中间元素之前的数组部分)重复搜索;如果目标值大于中间元素,则算法在数组的右半部分(中间元素之后的数组部分)重复搜索。

在这个问题中,数组是:

4 8 12 14 20 24

以下是二进制搜索算法如何针对每个目标值进行处理:

对于目标 2,算法首先将 2 与 12(数组中的中间元素)进行比较。由于 2 小于 12,算法将在数组的左半部分重复搜索,即:

4 8

在本例中,中间元素为 8,因此算法会将 2 与 8 进行比较。由于 2 小于 8,因此算法会在数组的左半部分重复搜索,即:

4

在这种情况下,中间元素是 4,因此算法会将 2 与 4 进行比较。由于 2 小于 4,搜索将失败(因为数组中没有更多元素可供搜索)。因此,目标值 2 不会在数组中找到。

对于目标 8,算法首先将 8 与 12(数组中的中间元素)进行比较。由于 8 小于 12,算法将在数组的左半部分重复搜索,即:

4 8

在这种情况下,中间元素是 8,因此算法会将 8 与 8 进行比较。由于 8 等于 8,因此搜索会成功,并且算法会返回元素 8 在数组中的索引(即 1) .因此,将在数组中找到目标值 8。

对于目标 15,算法首先将 15 与 12(数组中的中间元素)进行比较。由于 15 大于 12,算法将在数组的右半部分重复搜索,即:

14 20 24

在本例中,中间元素为 20,因此算法会将 15 与 20 进行比较。由于 15 小于 20,因此算法会在数组的左半部分重复搜索,即:

14

在这种情况下,中间元素是 14,因此算法会将 15 与 14 进行比较。由于 15 大于 14,因此搜索将失败(因为数组中没有更多元素可供搜索)。因此,目标值 15 不会在数组中找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 2017-03-04
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2020-11-16
    相关资源
    最近更新 更多