三分查詢演算法

2021-08-20 19:50:48 字數 845 閱讀 9860

輸入:n個元素的公升序陣列

a[1···n]和元素x;

輸出:如果x=a[j],1<=j<=n,則輸出就,否則輸出

0.步驟:

1、先把整個區間的

n/3的值

lmid

←n/3+

left。

2、再取右側區間的中間值

rmid

←lmid+right,從而把區間分為三個小區間。

3、我們a[lmid]的值與

x進行比較,如果相等就直接輸出

lmid

結束演算法

,x比a[lmid]

的值大我們就捨棄左區間進入第四步,否則我們捨棄右區間

right

←lmid,重複

1,2,3

。4. 我們a[rmid]與

x進行比較

,如果相等就直接輸出rmid結束演算法

,x比a[rmid]

的值大我們就捨棄左區間

left

←rmid,重複

1,2,3

,否則我們捨棄右區間

left

←lmid,right

←rmid,重複

1,2,3

時間複雜度分析:先將待查元素x與

n/3處的元素比較,然後將x與

2n/3

處的元素進行比較。比較的結果或者找到

x,或者將搜尋範圍縮小的原來的

n/3,程式有,時間複雜度為

o(log3(n))

三分查詢總結

演算法背景 二分與三分類似。二分法利用的是函式的單調性。而三分法利用的是函式的單峰性。二次函式就是乙個典型的單峰函式。三分法與二分法一樣,它會不斷縮小答案所在的求解區間,直到求出極值。如圖 演算法流程 1 設當前求解的區間為 l,r 令 m1 l r l 3,m2 r r l 3 2 接著我們計算這...

二分查詢與三分查詢演算法 C

首先是二分查詢法,時間複雜度o 2log2 n static bool find int sortedarray,int number return false 然後是三分查詢演算法,時間複雜度o 3log3 n static bool find int sortedarray,int number...

二分查詢,三分查詢

今天看分治法那塊,裡面提到了二分搜尋,想想好多年沒寫這個簡單的程式了,話說當年第乙個真正意義上理解的是三分查詢,即二分搜尋的拓展,所以根據分治法的思想,重新寫了二分搜尋,三分搜尋這兩個程式,突然回憶起來,當初對m l r 2,竟一點沒有懷疑過,那些分割點是怎麼求出來的,要提醒像我一樣初寫程式的朋友,...