例1 :如何計算2
\sqrt
2的近似值?
對 f (x
)=x2
\ f(x)=x^
f(x)=x
2來說,在x∈[
1,2]
\ x\in[1,2]
x∈[1,2
] 的範圍內,f(x
)\ f(x)
f(x)
是隨著x
\ xx 的增大而增大的,這就給二分法創造了條件,由於 2
\sqrt
2是無理數,因此只能獲得它的近似值,這裡不妨以精度到10−
5\ 10^
10−5
為例來逼近2
\sqrt
2。首先,令浮點型 left 和 right 的初值分別為1和2,然後通過比較 left 和 right 的中點 mid 處 f(x
)\ f(x)
f(x)
的數值與2的大小來選擇子區間進行逼近。有以下兩種情況:
(1)如果f(m
id
)>
2\ f(mid) > 2
f(mid)
>
2,說明mid
>
2\ mid > \sqrt
mid>2
,應當在[le
ft,m
id
]\ [left, mid]
[left,
mid]
的範圍內繼續逼近,故令rig
ht=m
id
\ right = mid
right=
mid。
(2)如果f(m
id
)<
2\ f(mid) < 2
f(mid)
<
2,說明mid
<
2\ mid < \sqrt
mid<2
,應當在[le
ft,m
id
]\ [left, mid]
[left,
mid]
的範圍內繼續逼近,故令lef
t=mi
d\ left = mid
left=m
id。當rig
ht−l
ef
t<10
−5
\ right - left < 10^
right−
left
<10
−5時結束,此時已經滿足精度要求,mid
\ mid
mid 即為所求的近似值。
具體實現**如下:
#includeconst double eps = 1e-5;
double f(double x)
double calsqrt()
else
} return mid;
}int main()
未完待續… 演算法學習 二分法
二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法,前提是資料結構必須先排好序,可以在資料規模的對數時間複雜度內完成查詢。但是,二分查詢要求線性表具有有隨機訪問的特點 例如陣列 也要求線性表能夠根據中間元素的特點推測它兩側元素的性質,以達到縮減問題規模的效果。舉個簡單的例子...
演算法學習 二分法查詢
二分法查詢是常用的查詢方法。二分法的演算法複雜度為 二分法查詢的思路是 1 輸入乙個排序好的序列 2 輸入乙個需要查詢的元素 3 求出序列的中間位置數 4 判斷查詢元素的與中間數的大小 5 縮小查詢範圍,可進行迭代或者迴圈。c語言 include 遞迴演算法 int recurbinary int ...
二分法及其拓展
二分查詢及其擴充套件實現 include include include include using namespace std 二分尋找值為value的元素 int binary search vector array,int left,int right,int value left right...