我想创建一个以O(logn)复杂度执行的递归伪代码 我希望它找到较低的f(i)&lt; 0和f [1 .... n]其中f(1)> 0且f(n)<0
prodedure fanc(A[n] , p , q ) //(this is my array,first digit of A ,last digit of A)
if A[n/2] >= 0
return fanc(A[n/2] , A[n/2] , A[n-1])
else
return fanc(A[n/2] , A[0] , A[n/2 -1])
if p<q
print p
else
print q
我知道不知何故我必须结束递归。此外,我想知道我是否在正确的道路上,如果你对这个问题有任何好的想法!
从https://stackoverflow.com/questions/42935621/algorithm-in-ologn复制的更好的作业文字:
假设整数函数f:{1,2,3 ... n}是单调的并且在{1,2,3 ... n}中定义,并假设f(1)> 0和f(n)&lt;我们希望找到f(i)<0的最小整数i。 0.为此目的设计一个在O(logn)中运行的算法。
答案 0 :(得分:2)
你几乎就在那里,你必须相对于p和q(从和到)而不是n。然后,如果从==到你找到了解决方案。这假设总是存在[1 ... n]范围内的解决方案。
function firstNegative(f, from, to) {
if (from == to)
return from;
next = from + (to - from) / 2;
if (f(next) >= 0)
return firstNegative(f, next + 1, to);
else
return firstNegative(f, from, next);
}
print firstNegative(f, 1, n);