询问 斐波那契查找(又称费氏查找)的原理(100分)

  • 主题发起人 主题发起人 zmxjh
  • 开始时间 开始时间
Z

zmxjh

Unregistered / Unconfirmed
GUEST, unregistred user!
有哪位大哥知道斐波那契查找(又称费氏查找)的原理,请告知。
 
设n个数据元素的有序表,且n正好是某个斐波那契数-1,即n=F(k)-1时,可用费氏查找。
算法:
对于表长为F(i)-1的有序表,以相对low偏移量F(i-1)-1取中点,即mid=low+F(i-1)-1,对表进行分割,则左子表表长为F(i-1)-1,右子表表长为F(i)-1-[F(i-1)-1]-1=F(i-2)-1。可见,两个子表表长也都是某个斐波那契数-1,因而,可以对子表继续分割。
 
希望能给个例子撒!
 
伪码如下:
① low=1;high=F(k)-1; // 设置初始区间
F=F(k)-1;f=F(k-1)-1; // F为表长,f为取中点的相对偏移量
② 当low>high时,返回查找失败信息 // 表空,查找失败
③ low≤high,mid=low+f;
// 取中点
a. 若kx<tbl.elem[mid].key,则
p=f;f=F-f-1; // 计算取中点的相对偏移量
F=p; // 调整表长F
high=mid-1;转② // 查找在左半区进行
b. 若kx>tbl.elem[mid].key,则
F=F-f-1; // 调整表长F
f=f-F-1; // 计算取中点的相对偏移量
low=mid+1;转② // 查找在右半区进行
c. 若kx=tbl.elem[mid].key,返回数据元素在表中位置 // 查找成功
 
接受答案了.
 
后退
顶部