現在正在學習查找和排序,為了節省時間提高效率,就正好邊學習邊整理知識點吧!
知識點一:二分查找/折半查找
1.二分查找的判定樹(選擇題)
下列二叉樹中,可能成為折半查找判定樹(不含外部結點)的是: (4分)
注:折半查找判定樹是一棵二叉排序樹,它的中序遍歷結果是一個升序序列,可以在選項中的樹上依次填上相應的元素。雖然折半查找可以上取整也可以下取整但是一個查找判定樹只能有一種取整方式。
如果升序序列是偶數個,那么終點應該偏左多右少。在2選項中,由根節點左子樹4個節點而右子樹5個節點可以確定用的是向下取整策略,但是它的左子節點在左子樹種對應的終點左邊2個,右邊個,明顯是上取整策略,策略沒有統一,所以是錯的。其他的選項類似分析。
2.二分查找法/折半查找法
已知一個長度為16的順序表L,其元素按關鍵字有序排列。若采用二分查找法查找一個L中不存在的元素,則關鍵字的比較次數最多是: (2分)
注:一次找到最邊界的那一個樹的情況下有最多次數
這個題中結點數16是個偶數: 第一次(0+15)/2 7 第二次 (8+15)/2 11
第三次 (12+15)/2 14 第四次(14+15)/2 14 第五次 (15+15)/2 15(下取整 的就 向右計算求最多次數)
第一次 (0+15)/2 8 第二次(0+7)/2 4 第三次(0+3)/2 2 第四次(0+1)/2 0
第五次 (0+0)/2 0(下取整的話就向左求最多次數)
若結點數是奇數15:第一次(0+14)/2 7 第二次 ( 0+6)/2 3 第三次(0+2)/2 1
第四次(0+0)/2 0
第一次(0+14)/2 7 第二次(8+14)/2 11 第三次 (12+14)/2 13
第四次(14+14)/2 0
這時候向左或者向右都是OK的(因為得到的數都是能夠被2整除的)
但是划重點了!!!折半查找一個有序表中不存在的元素,若向下取整,則要最多比較[log2n]+1次,若向上取整,則要最多比較[log2(n+1)],其實就是求樹的深度.(這一塊自己的說法可能不夠准確,希望大家看到有問題的可以指出來)
結合實際,我們用[log2n]+1來算更簡單並且計算[log2n]要取整數,因為可能會存在不是滿二叉樹的情況。
相應的也會有求關鍵字的最小查找次數,在這個題中是4次,可以通過把這棵樹畫出來更直觀地觀察其深度。
知識點二:二叉搜索樹/二叉排序樹
1.各種樹的平均查找效率
BST:二叉搜索樹
查找最好時間復雜度為O(lgn),最壞為O(n);
刪除和插入的時間復雜度與查找差不多
AVL:二叉平衡樹
查找時間復雜度為O(lgn)
插入的時候做多需要一次旋轉,時間復雜度為O(lgn)
刪除的時候需要的時間復雜度為O(2lgn)
紅黑樹:
查找時間復雜度為2O(lg(n+1))
刪除和插入的時間復雜度為O(lgn)
B樹:
從葉節點插入心的節點,
從磁盤讀寫效率上講,查找、刪除和插入的時間復雜度要小於任何二叉樹
B+樹
非葉節點只是為了索引第一個節點
之后葉節點之間可以相互索引,大型數據庫采用的結構