計算機基礎知識---數據結構

數據結構

  1. 時間複雜度
    時間複雜度是指執行算法所需要的計算工作量,因爲整個算法的執行時間與基本操作重複執行的次數成正 比,所以將算法中基本操作的次數作爲算法時間複雜度的度量,一般情況下,按照基本操作次數最多的輸 入來計算時間複雜度,並且多數情況下我們去最深層循環內的語句所描述的操作作爲基本操作。

  2. 循環隊列的順序表中,爲什麼要空一個位置?
    這是爲了用來區分隊空與隊滿的情況。如果不空一個位置,則判斷隊空和隊滿的條件是一樣的。

  3. 什麼是二叉排序樹?以及它的原理,算法。(二叉排序樹的查找過程)
    二叉排序樹又稱二叉查找樹,它或者是一顆空樹,或者滿足一下性質的二叉樹:
    ① 若左子樹不空,則左子樹上所有結點的值均小於根節點的值;
    ② 若右子樹不空,則右子樹上所有結點的值均大於根節點的值;
    ③ 左右子樹也分別是二叉排序樹。
    原理步驟:
    若根結點的關鍵字值等於查找的關鍵字,成功。
    否則,若小於根結點的關鍵字值,遞歸查左子樹。
    若大於根結點的關鍵字值,遞歸查右子樹。
    若子樹爲空,查找不成功。

  4. 哈夫曼樹
    == 定義:==
    給定n個權值作爲n個葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小,稱這樣的二叉樹爲最優二 叉樹,也稱爲哈夫曼樹(Huffman tree)。
    構造方法:
    假設有 n 個權值,則構造出的哈夫曼樹有 n 個葉子結點。 n 個權值分別設爲 w1、w2、…、wn,則哈夫 曼樹的構造規則爲:
    (1) 將w1、w2、…,wn看成是有n 棵樹的森林(每棵樹僅有一個結點);
    (2) 在森林中選出兩個根結點的權值最小的樹合併,作爲一棵新樹的左、右子樹,且新樹的根結點權值爲其 左、右子樹根結點權值之和;
    (3)從森林中刪除選取的兩棵樹,並將新樹加入森林;
    (4)重複(2)、(3)步,直到森林中只剩一棵樹爲止,該樹即爲所求得的哈夫曼樹。
    == 特點 ==
    ① 權值越大的結點,距離根節點越近;
    ② 樹中沒有度爲一的結點。
    應用:
    哈夫曼編碼,減少編碼的長度。哈夫曼編碼就是長度最短的前綴編碼。

  5. 什麼是哈希衝突?以及如何解決
    散列(哈希)表
    根據關鍵碼值(Key value)而直接進行訪問的數據結構。根據給定的關鍵字來計算出關鍵字在表中的地址,以加快查找的速度
    衝突
    指的是多個關鍵字映射同一個地址的情況
    解決辦法:
    (1) 開放定址法
    ① 線性探查法(產生堆積問題);
    ② 平方探查法(不能探查到哈希表上所有的地址,但至少能探查到一半的地址)
    (2) 鏈地址法
    把所有的同義詞用單鏈表連接起來。 補充(常見的哈希函數構造方法) 直接定址法,數字分析法,平方取中法,除留餘數法。

  6. 深度優先搜索遍歷和廣度優先搜索遍歷的過程
    ==深度優先搜索遍歷 : ==
    基本思想:首先訪問出發點V,並將其標記爲已訪問;然後選取與V鄰接的未被訪問的鄰接頂點W,訪問 W;再選取與W鄰接的未被訪問的頂點訪問,以此類推。當一個頂點所有的鄰接頂點都被訪問過時,則依 次退回最近被訪問過的頂點,若該頂點還有其他鄰接頂點未被訪問,則從這些頂點中去一個頂點進行上述 的過程,直至圖中所有頂點都被訪問過爲止。
    ==廣度優先搜索遍歷: ==
    基本思想:首先訪問起始頂點 V,然後選取與 V 鄰接的全部頂點 w1,w2,….,wn 進行訪問,再一次訪 問與w1,w2,… ,wn鄰接的全部頂點(不包括已訪問過的頂點),以此類推,直至所有頂點都被訪問過爲止。

  7. 迪傑斯特拉算法的過程
    該算法可以求得某一頂點到其餘各頂點的最短路徑。
    算法思想:設有兩個頂點集合 S 和 T,其中集合 S 中存放的是圖中已找到最短路徑的頂點,集合 T 中存放 的是圖中的剩餘頂點。 初始狀態時,集合S中只包含源點V0,然後不斷從集合T中選取到頂點V0路徑最短的頂點Vu 並加入集 合S中。集合S每加入一個新的頂點Vu,都要修改V0到集合T中各個頂點的最短路徑的長度值。不斷重 復這個過程,直至集合T中的頂點全部併入到S中爲止。

  8. 鏈表查找某個元素,平均的時間複雜度是多少
    O(n) 鏈表是順序存儲,故(1+n)/2

  9. 圖的存儲方式
    ① 鄰接矩陣:是圖的順序存儲結構,用兩個數組分別存儲數據元素(頂點)信息和數據元 素之間的關係(邊/弧)的信息。圖的鄰接矩陣表示是唯一的,無向圖的鄰接矩陣是對稱 的。
    ② 鄰接表:是圖的鏈式存儲結構,由單鏈表的表頭形成的頂點表和單鏈表其餘結點所形成 的邊表兩部分組成。
    ③ 十字鏈表:有向圖的另一種鏈式存儲結構。
    ④ 鄰接多重表:無向圖的鏈式存儲結構。

  10. 圖的深度遍歷是否唯一
    不一定是不唯一。我們可以取圖中任一頂點進行深度遍歷。

  11. 圖的相關概念
    :由結點的有窮集合V和邊的集合E組成
    ==類別:==有向圖和無向圖。
    頂點的度:出度和入度。
    ==有向完全圖:==若有向圖有n個頂點,則最多有n(n-1)條邊,則稱爲有向完全圖;
    無向完全圖若無向圖有n個頂點,則最多有n(n-1)/2條邊,則稱爲無向完全圖
    ==路徑:==相鄰頂點序偶所構成的序列
    ==簡單路徑:==序列中的頂點和路徑不重複出現的路徑。
    ==迴路:==路徑中第一個頂點和最後一個頂點相同的路徑
    連通: 無向圖中,如果Vi到Vj有路徑,則稱這兩個頂點連通。如果圖中任意兩個頂點之間都連通,則 稱改圖爲連通圖
    有向圖中,如果Vi到Vj有路徑,則稱這兩個頂點連通。如果圖中每一對頂點Vi和Vj,從 Vi到 Vj和Vj到Vi都有路徑,則稱改圖爲強連通圖。

  12. 最小生成樹的概念
    一個有 n 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有 n 個結點,並且有保持 圖聯通的最少的邊。如果在最小生成樹中添加一條邊,必定成一個環。
    相關算法:
    ① 普里姆算法 ② 克魯斯卡爾算法
    N個結點的最小生成樹有幾個結點,幾條邊:n個結點,n-1 條邊。

  13. 平衡二叉樹
    平衡二叉樹又稱AVL樹,是一種特殊的二叉排序樹,其左右子樹都是平衡二叉樹,且左右子樹的高度差的 絕對值不超過1.
    ==平衡因子 ==左子樹高度減去右子樹高度的差。
    平衡調整: 先找到失去平衡的最小子樹,即以距離插入結點最近,且平衡因子絕對值大於 1 的結點最 爲根節點的子樹,分爲LL,LR,RL,RR四中調節方式。

  14. 二叉樹的存儲
    ① 順序存儲結構用一個數組來存儲一顆二叉樹,二叉樹中的結點值按照編號依次存入一個一維數組中。 適用於完全二叉樹,若用於一般的二叉樹則會浪 費大量 存儲空間。
    ② 鏈式存儲結構二叉樹中的每一個結點用一個鏈結點來存放
    在這裏插入圖片描述

  15. M階B-樹和M階B+樹的主要區別
    ① B+樹所有有效數據全在葉子節點,而B-樹所有節點分散在樹中,B-樹中的關鍵字不重複。
    ② B+樹種有幾個關鍵字就有幾個子樹,B-樹中具有n 個關鍵字的節點含有(n+1)棵子樹。
    ③ B+樹有兩個指針,根指針和只想最小節點的指針,葉子節點連接成一個不定長的線性鏈表
    ④ B+樹中,每個節點(除根節點外)中的關鍵字個數 n 的取值範圍是⌈m/2⌉<=n<=m,根節點 n 的Lchild Data Rchild 取值
    ⑤ 範圍是2<=n<=m。B-樹中,每個節點(除根節點外的所有最底層非葉子節點)中的關鍵字取值範圍 是
    ⑥ ⌈m/2⌉-1<=n<=m-1,根節點n 的取值範圍是1<=n<[m-1]。
    ⑦ B+樹中的所有非葉子節點僅僅起到索引的作用,節點中的每個索引項只包含對應子樹的最大關鍵字 和 指向該子樹的指針,不含有該關鍵字對應記錄的存儲地址。而在B-樹中,每個關鍵字對應記錄的存儲 地址。

  16. 折半查找,以及其適用範圍和時間複雜度
    ==又稱二分查找,基本思路: ==
    在當前的查找區間[low…high]中,首先確定mid=(low+high)/2,然後拿關鍵字與mid比較,若相等則查 找成功,返回該位置,否則確定新的查找區間,mid>K,[low…mid-1] mid<K,[mid+1…high]
    直至查找自區間長度小於1時查找結束
    適用範圍:順序結構存儲並按照關鍵字大小有序排列。
    時間複雜度:O(log2N)

  17. 完全二叉樹
    若一棵二叉樹至多隻有最下面的兩層上的結點的度數可以小於 2,並且最下層上的結點都集中在該層最左 邊的若干位置上,則此二叉樹成爲完全二叉樹
    完全二叉樹特點:
    葉子結點只可能在最大的兩層上出現, 對任意結點, 若其右分支下的子孫最大層次爲L,則其左分支下的 子孫的最大層次必爲L 或 L+1

  18. 什麼是堆?有什麼作用?
    堆是一種數據結構,可以把堆看成一個完全二叉樹,並且這個完全二叉樹滿足: 任何一個非葉節點的值都不大於(或不小於)其左右子樹的結點的值。若父親大孩子小,則爲大頂堆,若 父親肖孩子大,則爲小頂堆。
    作用:應用於堆排序。

  19. 如何實現循環隊列?有何好處?
    如何實現:把數組弄成一個環,讓rear和front指針沿着環走,這樣就可以產生循環隊列。
    好處:循環隊列是順序隊列的改進,在順序隊列中,在元素進隊的時候,rear 要向後移動,元素出隊的時 候,front也要向後移動,這樣經過一系列的出隊和入隊操作之後,兩個指針最後會達到數組的末端,此時 雖然隊中已經沒有元素了,但是還是不能讓元素入隊,即出現了“假溢出”的現象。循環隊列就能避免出 現這個現象。

  20. 深度優先搜索形成的是什麼?森林唯一麼
    (森林,不能說樹)(不唯一,因爲鄰接表可能不唯一)

  21. 滿二叉樹的結點個數(n層)
    2的n次方減一(2n-1)

  22. 二叉查找樹查找的時間複雜度以及中序遍歷後得到什麼樣的序列
    遞增有序序列

  23. 什麼圖可以進行拓撲排序
    有向無環圖

  24. 順序隊列的特徵
    隊列是一種操作受限的線性表,只允許隊尾入隊,在隊頭進行出隊。最大的特點是先進先出。

  25. 排序
    在這裏插入圖片描述

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