演算法學習 二分法拓展

2021-08-26 20:50:16 字數 1491 閱讀 2284

例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...