考研複試常見問題(算法篇)

1.平衡二叉樹和紅黑樹

  • 【平衡二叉樹】:又稱爲AVL樹,是一種特殊的二叉排序樹,它的左右子樹都是平衡二叉樹,且左右子樹高度差的絕對值不大於1。將二叉樹上結點的左子樹深度減去右子樹深度稱爲平衡因子BF,平衡二叉樹上的平衡因子只可能是-1、0、1,否則二叉樹就不是平衡的。
  • 【紅黑樹】:是一種二叉查找樹,但每個結點增加一個存儲位表示結點顏色(非黑即紅),通過對任何一條從根到葉子結點的路徑各個結點着色方式的限制,紅黑樹確保沒有一條路徑是其他路徑長度的兩倍,因此,紅黑樹是一種弱平衡二叉樹,相比於AVL樹,它的旋轉次數少,對於搜索、插入、刪除操作較多的情況下,通常選紅黑樹。
  • 【區別】
    • AVL樹是高度平衡的,頻繁插入和刪除,效率下降
    • 紅黑樹不是高度平衡的,插入最多旋轉2次,刪除最多旋轉3次

2.哈夫曼編碼

哈夫曼編碼是哈夫曼樹的一種應用,廣泛用於數據文件壓縮。

3.B+樹

B+樹是一種多路搜索樹,主要爲磁盤或其他直接存取輔助設備而設計的一種平衡二叉樹,在B+樹中,按照關鍵字大小有序排列。所有記錄節點都是按照鍵值大小順序存放在同一層的葉節點中。
相比於B樹,B+樹有以下特點:

  • 每個節點上的指針上限爲2d而不是2d+1(d爲節點的出度)
  • 內節點不存儲data,只存儲key
  • 葉子結點不存儲指針

4.排序算法

(1)冒泡排序

重複走訪過要排序的數列,一次比較相鄰的兩個元素,如果他們順序錯誤就交換,直到沒有再需要交換。
兩個for循環,第一個循環0~len-1,第二個循環0~len-1-i

(2)選擇排序

首先在未排序的序列中找出最大(小)元素,存放在排序序列的起始位置,然後再從剩餘未排序的元素中繼續尋找最大(小)元素,放到排序序列的末尾,直到所有元素均排序完畢。

(3)插入排序

通過構建有序序列,對未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入

(4)希爾排序

插入排序的升級版

  • 根據某一增量將序列分爲若干個子序列,並對子序列進行插入排序
  • 然後逐漸將增量縮小,並重覆上述過程,直到增量爲1,此時數據基本有序,最後進行插入排序

(5)快速排序

  • 基本思想:分治思想
    先從數列中取出一個數作爲key值,將比這個數小的數全部放在它的左邊,大於或等於它的數全部放在它的右邊,對左右兩個小數列重複第二步,直至區間只有1個數。

(6)歸併排序

採用分治法,對於包含m個元素的待排序序列,將其看成m個長度爲1的子序列。然後兩兩進行歸併,得到m/2個長度爲2或者1的有序子序列;然後再兩兩歸併,直到得到1個長度爲m的有序序列

(7)堆排序

堆排序是一種選擇排序,利用堆這種數據結構來完成。其算法思想是將待排序的數據構造成一個最大堆(升序)或最小堆(降序),然後將堆頂元素與待排序數組的最後一個元素交換位置,此時末尾元素就是最大或最小的值。然後將剩餘n-1個元素重新構造成最大堆或最小堆。

(8)基數排序

一般用於長度相同的元素(不相同補0)組成的數組,首先按照最低有效數字排序,再由低到高位排序

(9)計數排序

對數組中的每一個元素x,確定出小於x的元素個數,這樣就可以將x輸出到正確位置了

(10)桶排序

將待排序元素劃分到不同的痛。先掃描一遍序列求出最大值 maxV 和最小值 minV,設桶的個數爲 k ,則把區間 [minV, maxV] 均勻劃分成 k 個區間,每個區間就是一個桶。將序列中的元素分配到各自的桶。對每個桶內的元素進行排序。可以選擇任意一種排序算法。將各個桶中的元素合併成一個大的有序序列。

5.查找算法

(1)順序查找

順序查找適合於存儲結構爲順序結構或者鏈接結構的線性表,順序查找也稱爲線性查找,屬於無序查找,從線性表的一端開始查找,查找到最後。

(2)二分查找

元素必須是有序的,如果是無序的要先進行排序操作。
也稱折半查找。用給給定值與中間結點的關鍵字比較,中間結點把線性表分成兩個子表,若相等則查找成功,若不等,再根據關鍵字確定下一步查找哪個子表,這樣遞歸進行下去。

(3)插值查找

基於二分查找,是自適應的,根據關鍵字在整個有序表中所處的位置,讓中間值更加靠近關鍵字,間接減少比較次數

5.貪心算法

基本思路是從問題的某一個初始解出發一步一步的進行,根據某個優化測度,每一步都要確保能獲得局部最優解。

6.輾轉相除法

求兩個數m、n的最小公倍數和最大公約數,以除數和餘數反覆做除法運算,當餘數爲 0 時,取當前算式除數爲最大公約數 最小公倍數=兩數之積/最大公約數

7.如何判斷素數

判斷m是不是素數,讓m被2~(根號m)之間的數除,如果不能被之間的任何一個數整除,那麼m就是素數!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章