请有人给我解释一下斐波那契搜索算法。
我已经查阅了许多资源,也进行了大量的搜索,但是这个算法仍然不清楚。大部分的资源都将它与二分搜索联系在一起,但我并没有理解它们。我知道斐波那契搜索算法是二分搜索的扩展,而我对二分搜索非常了解。
我的书籍也没有详细解释。
如@AnthonyLabarre所说,我更新问题并补充了我没有理解的具体内容:
我使用的书中有些奇怪的符号,没有任何解释。在此发布算法,请帮忙解释。
if(key == a[mid]) return mid; // understood this, comes from binary search
if(key > a[mid]) {
if(p == 1) return -1; // What is p? It comes as a function arg
mid = mid + q; //Now what's this q? Again comes a function arg
p = p - q; // Commented as p=fib(k-4)
q = q-p; // q = fib(k-5)
} else // key < a[mid] {
if(q == 0) return -1;
mid = mid - q;
temp = p - q;
p = q; // p=fib(k-3)
q = temp; // q = fib(k-4)
return fibsearch(a, key, mid, p, q);
}