单调函数中的第一个严格更大的元素

First strictly greater element in a monotone function

我有函数 f:N->Z,其中 f(i) < f(i+1) 对于每个 i。

目标是建议找到 n = min{ i | 的算法f(i) > 0 } 在 O(log n) 中。

-调用函数f(i)算作基本操作。

O(log n) 建议使用二分查找,但我不知道使用什么作为上限。

任何关于如何解决这个问题的建议都将不胜感激。

编辑:

问题类似于在排序数组中找到第一个严格更大的元素,不同之处在于这里我有数组的函数 insted,所以我没有上限。

问题更多的是理论上的,我不需要实施解决方案。

如果您知道 n 的最大值,您可以简单地从区间 [0,max] 开始,然后进行二分查找。


如果 n 是无界的,您可以尝试在 f(i) > 0.

中找到任何 i

步骤 1: 找到有效上限:
尝试 i=1, 2, 4, 8, 16, 32, ... 直到你找到一个带有 f(i) > 0 的 i (需要 O(log n) 次尝试)

步骤 2: 使用 [0, iupperBound] 进行二分查找(需要 O(log n) 时间)

所以总体时间复杂度是O(log n)