靜態查找表和動態查找表


靜態查找表:

1.順序查找表:從線性表一端開始掃描,將掃到的關鍵字與給定值比較,相同則查找成功

2.有序表查找:若線性表有序,則可以折半查找。折半查找升級版為插值查找,及不取1/2處。斐波那契查找,也是折半查找的變種

3.索引順序表查找:效率介於1)2)之間。又稱分塊查找。塊與塊之間有序,塊內無序。實際進行兩次查找,第一次折半查找,第二次順序查找

動態查找表:相比於靜態查找表,查找過程中會修改元素

1.構造查找樹:

  二叉查找樹:

  1)若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;

  2)若任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;

  3)任意節點的左、右子樹也分別為二叉查找樹。

  4)沒有鍵值相等的結點

  23樹:二叉查找樹的升級版:往三結點插入元素需要將三節點裂成二結點

  紅黑樹:是23樹的簡化版,紅鏈鏈接3node黑鏈鏈接2node,查找方法同一般二叉查找樹

  b樹:堆23樹的進一步升級

    m階B樹的定義如下:

    1. 根節點至少包括兩個孩子;

    2. 樹中每個節點最多含有m個孩子(m>=2);

    3. 除根節點和葉節點外,其他每個節點至少有ceil(m/2)個孩子(ceil()為向上取整);

    4. 所有葉子節點都位於同一層;

    5. 每個非葉節點包括n個關鍵字信息,其中ceil(m/2)-1<=n<=m-1。

  b+樹:與b樹相比主要區別在於只有葉結點存放信息,非葉結點只起索引作用。所有的葉子結點和相連的節點使用鏈表相連,便於區間查找和遍歷

    B+ 樹的優點在於:

    1.由於B+樹在內部節點上不好含數據信息,因此在內存頁中能夠存放更多的key。 數據存放的更加緊密,具有更好的空間局部性。因此訪問葉子幾點上關聯的數據也具有更好的緩存命中率。

    2.B+樹的葉子結點都是相鏈的,因此對整棵樹的遍歷只需要一次線性遍歷葉子結點即可。而且由於數據順序排列並且相連,所以便於區間查找和搜索。而B樹則需要進行每一層的遞歸遍歷。相鄰的元

    素可能在內存中不相鄰,所以緩存命中性沒有B+樹好。

    B樹也有優點:由於B樹的每一個節點都包含key和value,因此經常訪問的元素可能離根節點更近,因此訪問也更迅速。

hash查找:

    構造哈希函數:  

    1)直接定址(整型)

    2)數字分析法

    3)平方取中法

    4)取余法

    5)折疊法:將關鍵字分塊折疊 

    6)減去法:關鍵字減特定變量

    7)基數轉化法:關鍵字變為其他進制

    8)偽隨機數法:用偽隨機函數

    沖突的處理:

    1)開放地址法:

    線性探測法:若重復,在哈希表中遍歷空缺位置並插入。缺點:①會堆聚,即沖突比較頻繁的話哈希表就會亂②如果刪除元素會導致計算機以為一定找不到對應元素③處理溢出不方便

    線性補償探測法:線性探測法的改進,遍歷時步長不選一,選為n

    偽隨機探測:另一種改進方法,步長由偽隨機函數確定

    2)鏈地址法:

    

    3)再哈希法:有沖突時再哈希一次,一直到無沖突

    4)建立公共溢出區:將所有有沖突的放在哈希表外,為其建立公共溢出區


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM