1. 程式人生 > >查詢演算法之三分查詢

查詢演算法之三分查詢

三、具體實現 

const double EPS = 1e-10;  
  
double calc(double x)  
{  
    // f(x) = -(x-3)^2 + 2;   
    return -(x-3.0)*(x-3.0) + 2;  
}  
  
double ternarySearch(double low, double high)  
{  
    double mid, midmid;  
    while (low + EPS < high)  
    {  
        mid = (low + high) / 2;  
        midmid = (mid + high) / 2;  
        double mid_value = calc(mid);  
        double midmid_value = calc(midmid);  
        if (mid_value > midmid_value)  
            high = midmid;  
        else  
            low = mid;  
    }  
    return low;  
}