【问题标题】:How to code a binary search algorithm that breaks the instances into 1/3 and 2/3如何编写将实例分成 1/3 和 2/3 的二进制搜索算法
【发布时间】:2021-02-18 17:40:47
【问题描述】:

我正在尝试设计一个 递归 二进制搜索算法(在伪代码中)以在 n 个整数的(排序)列表中找到任意数字 k,这会破坏将实例分为两部分:一与 1/3 元素和另一个具有 2/3 的元素。然后我需要将其复杂性与更传统的二分搜索算法进行比较,该算法将实例分成两半。

到目前为止,这是我在伪代码方面提出的 - 我不确定它是否正确。但是,我不太确定如何比较它们的时间复杂度。

  BinarySearch(A, value, low, high) {
      // invariants: value > A[i] for all i < low
                     value < A[i] for all i > high
      if (high < low)
          return not_found // value would be inserted at index "low"
      third = (low + high) / 3
      if (A[third] > value)
          return BinarySearch(A, value, low, third-1)
      else if (A[third] < value)
          return BinarySearch(A, value, third+1, high)
      else
          return third
  }

【问题讨论】:

标签: algorithm binary-search


【解决方案1】:

首先,third = (low + high) / 3 是完全错误的。例如,如果low == 100high == 110,你最终会得到third == 70。不完全是你所追求的。

正确的分手是third = low + (high - low)/3

关于复杂性,请考虑最坏的情况,其中目标数量最多为一个(始终位于较大的分区中)。搜索空间如何缩小对等递归级别?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2012-01-17
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多