菜雞筆記之 斐波那契查詢

2021-10-07 12:42:37 字數 2210 閱讀 4042

斐波那契查詢:

前提:查詢的序列必須已經排好序,並且資料個數為fib[k]-1個(若不足fib[k]-1個需手動擴充序列)

斐波那契查詢類似於二分查詢,但與二分查詢不同的是分割點不同,二分查詢每次以(high+low)/2作為分割點,而斐波那契查詢每次以**分割點作為分割位置。

思路:一開始將目標值target與第f(k-1)位置的記錄進行比較(即mid=low+f(k-1)),比較結果分為三種:

為什麼要求資料個數為fib[k]-1:

主要是為mid騰出乙個位置出來,示意圖如下:(**為參考文章)

參考文章

**實現(斐波那契查詢)

# include

# include

# define len 15

intmain

(void

)/*enter the numbers*/

for(

int i =

0;i)/*creat the fibonacci array*/

int fib[len]

;creat_fib

(fib,len)

;/*search the target number*/

int target,result;

printf

("which number do you want to search:");

scanf

("%d"

,&target)

; result =

fib_search

(fib,array,n,target)

;printf

("%d is the %dth number\n"

,target,result+1)

;return0;

}/***function:creat_fib

**description:creat the fibonacci array including len numbers

**parameter 1: the name of the fibonacci array

**parameter 2: the length of this array

**return: none

*/void

creat_fib

(int

* fib,

int len)

return;}

/***function: fib_search

**description: finding the target number in the array by fibonacci search

**parameter 1: the name of fibonacci arry

**parameter 2: the name of the array

**parameter 3: the length of the array

**parameter 4: target number

**return: the place of the target in the array

*/int

fib_search

(int

* fib,

int* array,

int n,

int target)

/*extend the array length to fib[k]-1*/

array =

(int*)

realloc

(array,

sizeof

(int)*

(fib[k]-1

));for

(int i = n;i

;i++

)/*search the target*/

while

(low<=high)

else

if(target

)else

if(target>array[mid])}

printf

("can not find this number!\n");

exit(0);}

斐波那契查詢

斐波那契查詢 斐波那契查詢的核心是 1 當key a mid 時,查詢成功 2 當key 3 當key a mid 時,新的查詢範圍是第mid 1個到第high個,此時範圍個數為f k 2 1個,即陣列右邊的長度,所以要在 f k 2 1 範圍內查詢。與二分查詢相比,斐波那契查詢演算法 的明顯優點在...

斐波那契查詢

與二分查詢相比,斐波那契查詢演算法的明顯優點在於它只涉及加法和減法運算,而不用除法。因為除法比加減法要占去更多的機時,因此,斐波那契查詢的平均效能要比折半查詢好。斐波那契查詢與折半查詢的時間複雜度間同為o log2 log2n 平均 情況下,斐波那契查詢優於折半查詢,但最壞情況下則差於折半查詢。斐波...

斐波那契查詢

基於二分法 此演算法依靠斐波那契數列 來跳轉比較位置 在玩數字板所以有了手寫圖 單步驟原理如下 c語言實現 include include define return fail 1 斐波那契查詢 int fibonaccisearch int src int,int src len,int sear...