查找表(Search Table)是由同一類型的數據元素(或記錄)構成的集合。算法
查找(Searching)的定義是:給定一個值K,在含有n個結點的表中找出關鍵字等於給定值K的結點。若找到,則查找成功,返回該結點的信息或該結點在表中的位置;不然查找失敗,返回相關的指示信息。數據結構
若在查找的同時對錶作修改操做(如插入和刪除),則相應的表稱之爲動態查找表。不然稱之爲靜態查找表。spa
和排序相似,查找也有內查找和外查找之分。若整個查找過程都在內存進行,則稱之爲內查找;反之,若查找過程當中須要訪問外存,則稱之爲外查找。code
線性表的查找分爲順序表查找(順序查找)、有序表查找(折半查找/二分查找,插值查找,斐波那契查找)、線性索引查找(稠密索引,分塊索引,倒排索引)。
排序
樹上的查找包括二叉排序樹查找、平衡二叉樹(AVL樹)、多路查找樹(B樹)。
索引
查找運算的主要操做是關鍵字的比較,因此一般把查找過程當中對關鍵字須要執行的平均比較次數(也稱爲平均查找長度)做爲衡量一個查找算法效率優劣的標準。內存
平均查找長度ASL(Average Search Length)定義爲:ci
其中:class
①n是結點的個數;效率
②Pi是查找第i個結點的機率。若不特別聲明,認爲每一個結點的查找機率相等,即
pl=p2…=pn=1/n
③ci是找到第i個結點所需進行的比較次數。
注意:
爲了簡單起見,假定表中關鍵字的類型爲整數:
typedef int KeyType; //KeyType應由用戶定義