Givien是一个具有不同值的预排序数组,找到i使得A [i] = i

时间:2015-07-09 02:34:43

标签: algorithm search time-complexity

问题:

设A是一个整数大小为n的数组,其中 A[1] < A[2] < ... < A[n]

(注意,每个条目可以是正整数或负整数。)

  1. 如果存在此类O(log n),则提供一种算法,i时间查找A[i] = i ii。如果不存在此类0,则算法返回Ω(log n)
  2. 证明使用比较解决此问题的任何算法都必须花费时间O(n)
  3. 到目前为止,我只能找到一个花费O(log n)时间的算法,这很容易,但我知道只有一个树结构可以是set
    我是Algorithms的新手。

    提前致谢。

1 个答案:

答案 0 :(得分:3)

考虑一下i a[i] > i,其中j > i =&gt;语句a[j] > j

中的A[1] < A[2] < ... < A[n].

同样适用于i的任何a[i] < i,对于任何j < i =&gt; a[j] < j也会出于同样的原因。

因此,我们可以在这里使用二进制搜索。 (对于选定的点p,如果a[p] > p,则继续左侧部分,如果a[p] < p,则继续右侧部分)