【问题标题】:How many elements would have to searched in order to locate the integer 5215 at the 499th element and integer 7282 at the 686th element?为了将整数 5215 定位在第 499 个元素,将整数 7282 定位在第 686 个元素,需要搜索多少个元素?
【发布时间】:2017-09-08 13:05:41
【问题描述】:

假设它是二进制搜索算法并且数组中的元素总数为 1000,则必须查看(二进制搜索)多少元素才能在元素 499 处找到整数 5215 和在元素 686 处找到整数 7282?

我将如何解决我的问题?我知道这个算法首先通过将数组元素的总数除以一半来检查搜索值(或我想要定位的元素)是否在中间;但是,如果它不存在,它会检查数组的上半部分,但如果它不存在,它会再次返回。另外,这是我的证明,证明我在尝试询问嵌入在 HTML 代码中的问题之前确实研究了这个问题。

不过我确实有一个理论(请参阅下面的理论:)

1000/2 = 第一个元素是 500 个元素

500/2,下一个元素是250元素。

【问题讨论】:

  • @我知道在 1000 个元素的数组中有 0-999 个索引,所以这是首先了解的开始吗?
  • 二分查找假定数组已排序。在您的示例中,数组不能按升序排序,因为 499 处的项目大于 686 处的项目。数组是否按降序排序?如果数组没有排序,那么二分查找将不起作用。
  • @Jim Mischel 如果 499 索引是 5215 而 686 索引是 7282 怎么样?对此感到抱歉。
  • 使用铅笔和纸,完成en.wikipedia.org/wiki/Binary_search_algorithm#Procedure 中描述的步骤。写下每一步的工作。您将在大约 5 分钟内找到答案。
  • @Jim Mischel 在我看来这有点道理,但是是否有可能绘制一个清晰的(彩色)视觉表示来看看这在理论上是如何工作的。它会如何看待 1000 的下半部分和上半部分?

标签: data-structures array-algorithms


【解决方案1】:

您的问题似乎很神秘,但如果您需要帮助,我可以帮助您使用二进制搜索算法。

当您的数组按升序或降序排序时,二分搜索算法有效。

此算法在第一次迭代时访问数组的中间元素,如果元素不在偶数情况下为 n/2 或在奇数情况下为 n+1/2,算法将检查搜索元素是更大还是更小,如果它更小,则访问下半部分,如果它大于数组的上半部分,则访问。这是数组按升序排序的情况。

对于时间复杂度,它给你最坏的情况是 O(log n)。其中 n 是数组中的元素数,即数组的长度。

希望我能帮上忙。

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2019-09-16
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    相关资源
    最近更新 更多