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

Algorithm 单调函数中的第一严格大元素,algorithm,search,find,computer-science,Algorithm,Search,Find,Computer Science,我有函数f:N->Z,其中f(I)0}的算法 -调用函数f(i)算作基本操作 O(logn)建议使用二进制搜索,但我不知道用什么作为上限 任何关于如何处理这一问题的建议都将不胜感激 编辑: 问题类似于在排序数组中查找第一个严格较大的元素,区别在于这里我用函数代替数组,所以我并没有上界 问题更多的是理论,我不需要实现解决方案。如果你知道n的最大值,你可以简单地从区间[0,max]开始,然后进行二进制搜索 如果n是无界的,您可以尝试查找i中的f(i)>0 步骤1:查找有效的上限: 尝试i=1,2,

我有函数f:N->Z,其中f(I) 目标是提出在O(logn)中找到n=min{i | f(i)>0}的算法

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

O(logn)建议使用二进制搜索,但我不知道用什么作为上限

任何关于如何处理这一问题的建议都将不胜感激

编辑:

问题类似于在排序数组中查找第一个严格较大的元素,区别在于这里我用函数代替数组,所以我并没有上界


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

如果你知道
n
的最大值,你可以简单地从区间
[0,max]
开始,然后进行二进制搜索


如果
n
是无界的,您可以尝试查找
i
中的
f(i)>0

步骤1:查找有效的上限:
尝试i=1,2,4,8,16,32。。。直到您找到一个具有
f(i)>0的i
(需要
O(logn)
尝试)

第2步:使用
[0,iupperbinded]
进行二进制搜索(需要
O(日志n)
时间)


所以总的时间复杂度是O(logn)

我必须在O(logn)时间中找到n。第一次在这里发帖,所以可能我没有解释什么目标是足够好的。我现在编辑了一点。无论如何,谢谢。@Fabo:我更新/扩展了我的答案,以表明它是在O(logn)时间内完成的。谢谢:)帮助很大。这个问题的
n
是什么?