Algorithm 描述一种求解单调递减函数问题的O(logn)分治算法 在这个问题中,我们考虑单调递减函数f:n。→ Z即,在返回整数值的自然数上定义的函数,例如fi>fi+1。假设我们可以在常数时间O1的任意i处计算f,我们想要找到n=min{i∈ N | fi≤ 0}也就是说,我们想要找到f变为负值的最小值

Algorithm 描述一种求解单调递减函数问题的O(logn)分治算法 在这个问题中,我们考虑单调递减函数f:n。→ Z即,在返回整数值的自然数上定义的函数,例如fi>fi+1。假设我们可以在常数时间O1的任意i处计算f,我们想要找到n=min{i∈ N | fi≤ 0}也就是说,我们想要找到f变为负值的最小值,algorithm,data-structures,computer-science,Algorithm,Data Structures,Computer Science,通过对f1、f2、f3的评价,可以明显地及时解决问题。fn。然而,我必须描述一个OLOGN分治算法来解决这个问题。提示:根据精心选择的值计算f≤ n,并且可能在n和2n之间的一对值处 有人能帮忙吗?我甚至不知道从哪里开始解决这个问题?首先,找到一个包含目标的范围,其大小在Olog n时间内为On int mini = 1; int maxi = 2; while(f(maxi)>0) { mini = maxi+1; maxi *= 2; } 对于,只需在[min,max

通过对f1、f2、f3的评价,可以明显地及时解决问题。fn。然而,我必须描述一个OLOGN分治算法来解决这个问题。提示:根据精心选择的值计算f≤ n,并且可能在n和2n之间的一对值处


有人能帮忙吗?我甚至不知道从哪里开始解决这个问题?

首先,找到一个包含目标的范围,其大小在Olog n时间内为On

int mini = 1;
int maxi = 2;
while(f(maxi)>0) {
    mini = maxi+1;
    maxi *= 2;
}
对于,只需在[min,maxi]中进行二进制搜索

while(mini < maxi) {
    int testi = mini+(maxi-mini)/2;
    if (f(testi)<=0) {
        maxi = testi;
    } else {
        mini = testi+1;
    }
}
return mini;

假设您对fi进行了评估,结果为负值。你能肯定地排除在下一步尝试时毫无帮助的可能性吗?