离散二进制搜索

时间:2014-04-19 11:24:33

标签: c++ algorithm binary-search

有人可以用一个例子解释discrete binary search吗?

我在上面的链接上读到了它,并且对它是什么有一个基本的想法,但我仍然不理解代码部分以及它是如何实际实现的。

1 个答案:

答案 0 :(得分:3)

基本上,假设

  • 你有一个单调递增的函数f(x) (减少)区间[a,b]。
  • f(a)< C< F(b)中
  • 您希望找到x,使得f(x)= C.

然后您可以使用二进制搜索来查找x。基本上,每次变量x的可能间隔的一半。

要实现它,请执行以下操作:

#define EPS 1E-9

double f(double x)
{
   ///some monotonically increasing function on [a, b], for example f(x) = x^3:
   return x*x*x;
}

double binarySearch(double C, double a, double b)
{
   double low = a, high = b;
   double mid;
   while(abs(low-high) > EPS)
   {
      mid = low + (high - low) / 2;
      if f(mid) < C
          low = mid;
      else
          high = mid;
   }
   return mid;
}