查詢演算法__Fibonacci查詢
查詢演算法__Fibonacci查詢
思路與原理
閱讀博文查詢演算法__二分查詢會發現,其還存在改進的餘地,不難發現轉向左、右分支前的關鍵碼比較次數不等,而遞迴深度卻相同。
改進思路:若能通過遞迴深度的不均衡,對轉向成本的不均衡進行補償,平均查詢長度應能進一步縮短。
設,則可取,於是前後子向量的長度分別為、
C++實現
template<typename T>
int fibSearch(T *A,const T &e,int lo,int hi)
{
Fib fib(hi-lo);//建立fibonacci數列
while(lo<hi)
{
//通過向前順序查詢,確定形如fib(k)-1的軸點(分攤O(1))
while(hi-lo<fib.get()) fib.prev();
int mid=lo+fib.get()-1;//按黃金比例切分
if(e<A[mid])
hi=mid;//深入前半段[lo,mid)繼續查詢
else if(e>A[mid])
lo=mid+1;//深入後半段[mid+1,hi)
else
return mid;//在mid處命中
}
return -1;//查詢失敗
}
結論
Fibonacci查詢的ASL(平均查詢長度),(在常係數的意義上)優於二分查詢。
相關文章
- 查詢演算法__插值查詢演算法
- 查詢演算法__二分查詢演算法
- 查詢演算法之二分查詢演算法
- 查詢演算法演算法
- 演算法 - 查詢演算法
- 二分查詢【折半查詢】演算法 PHP 版演算法PHP
- SQL查詢的:子查詢和多表查詢SQL
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- 查詢演算法(上)演算法
- 查詢演算法(下)演算法
- Java 查詢演算法Java演算法
- 複雜查詢—子查詢
- 查詢——二分查詢
- 如何找東西?查詢演算法之順序查詢和二分查詢詳解演算法
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- 分塊查詢【大規模資料查詢演算法優化】【索引順序查詢】演算法 PHP 版演算法優化索引PHP
- group by,having查詢 ”每**“的查詢
- Elasticsearch複合查詢——boosting查詢Elasticsearch
- 雜湊查詢演算法演算法
- 插值查詢演算法演算法
- 子字串查詢演算法字串演算法
- 離線查詢與線上查詢
- oracle 精確查詢和模糊查詢Oracle
- pgsql查詢優化之模糊查詢SQL優化
- MySQL - 資料查詢 - 簡單查詢MySql
- SSH:hiberate實現資料的查詢(單查詢和全查詢)
- 21億Q綁查詢21億Q綁查詢21億Q綁查詢21億Q綁查詢21億Q綁查詢
- C#演算法設計查詢篇之03-插值查詢C#演算法
- 演算法->二分查詢演算法
- 【演算法】二分查詢演算法
- php查詢演算法的理解PHP演算法
- Spring Data Jpa 的簡單查詢多表查詢HQL,SQL ,動態查詢, QueryDsl ,自定義查詢筆記SpringSQL筆記
- 391、Java框架46 -【Hibernate - 查詢HQL、查詢Criteria、查詢標準SQL】 2020.10.19Java框架SQL
- Java ——MongDB 插入資料、 模糊查詢、in查詢Java
- mysql查詢結果多列拼接查詢MySql
- 資料庫高階查詢之子查詢資料庫
- 查詢最佳化——查詢樹結構
- Solr複雜查詢一:函式查詢Solr函式