算法學習——二分法拓展

     上一篇提到的都是整數情況下的二分查詢問題,事實上二分法的應用遠遠不止此,下面介紹幾個相關的例子。

例1 :如何計算2 的近似值?

     對  f(x)=x2 來說,在 x[1,2] 的範圍內, f(x) 是隨着 x 的增大而增大的,這就給二分法創造了條件,由於 2 是無理數,因此只能獲得它的近似值,這裏不妨以精度到 105 爲例來逼近2

     首先,令浮點型 left 和 right 的初值分別爲1和2,然後通過比較 left 和 right 的中點 mid 處  f(x) 的數值與2的大小來選擇子區間進行逼近。有以下兩種情況:

(1)如果 f(mid)>2 ,說明 mid>2 ,應當在 [left,mid] 的範圍內繼續逼近,故令 right=mid

(2)如果 f(mid)<2 ,說明 mid<2 ,應當在 [left,mid] 的範圍內繼續逼近,故令 left=mid

     當 rightleft<105 時結束,此時已經滿足精度要求, mid 即爲所求的近似值。

具體實現代碼如下:

#include<stdio.h>
const double eps = 1e-5;
double f(double x) {
    return x * x;
}
double calSqrt() {
    double left = 1, right = 2, mid;
    while(right - left > eps) {
        mid = (left + right) / 2;
        if(f(mid) > 2) {
             right = mid;
        } 
        else {
            left = mid;
        }
    }
    return mid;
}
int main(){
    printf("%f", calSqrt()); 
    return 0;
} 

未完待續….

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章