斐波那契查詢:
前提:查詢的序列必須已經排好序,並且資料個數為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...