执行二进制搜索

时间:2017-01-06 10:17:35

标签: algorithm search

我正在执行二分搜索,假设我必须找到x的最小值,以便black_box(x)给我true结果。

black_box(x)

的属性
  • 如果black_box(x)给我真实,那么x+1,x+2,x+3,x+4....upto infinty所有人都会给我true

对于整数值,这是简单的二进制搜索

 start=0;
 end = Max;
 ans=-1;
 while(start<=end){

    mid =(start+end)/2;
   if(black_box(mid)):
       end =mid-1
       ans=mid;
   else: start=mid+1;
}

如果我想要一个小数为2的floating point整数怎么办?我该怎么做二分搜索?

1 个答案:

答案 0 :(得分:1)

您只需迭代,直到startend的差异不超过0.01。所以停止条件现在是:

while(end-start > 0.01){

此外,正如您在评论中指定的那样,您不能在算法中递增/递减startend,因为索引不是离散的。完整的算法现在是:

 start=0;
 end = Max;
 ans=-1;
 while(end-start > 0.01){

    mid =(start+end)/2.0;
   if(black_box(mid)):
       end =mid
       ans=mid;
   else: start=mid;
}

这是有效的,因为在每次迭代时,start在精确值上是下限,而end在精确值上是上限 。如果两者的差异不超过0.01,我们知道它在startend之间,并且由于差异小于0.01,因此精确到两位小数。

然而,你的算法错误,因为通过设置end = Inf,你无法使用它。您也许可以使用最大可表示值,或者首先使用指数增量搜索作为预处理步骤。