文章目錄
- 基礎知識
- 一.判斷題(10 題,每題 2 分)
- 1.若函數 以及 , 則 是 並且 是 .
- 2用簡單均勻的哈希函數將 n 個不同的 keys 映射到一個長度爲 m 的數組,集合{{k, l}: k≠l and h(k) = h(l)}的期望大小是 n/m.
- 3 .一個有n個節點的有向無環圖最多有n(n-1)/2條邊。
- 4 .在圖深度優先遍歷 DFS 算法中,對於圖 G 任意兩點節點 u 和 v,如果 u 的結束時間大於 v 的結束時間,並且 u 和 v 在同一個 DFS 樹中,那麼在此 DFS 樹中 u 是 v 的先驅。
- 5 .給定一個長度爲 n、包含 100 個變量的布爾公式 F,判斷 F 是否可滿足是 NP-complete, 假設 P≠NP.
- 二.單選題(15 題,每題 2 分)
- 1.假設一個棧由一個線性鏈表實現,其中僅有一個指針指向鏈表的第一個元素(棧頂)。下面哪一個關於進棧和出棧操作的算法複雜度是正確的?
- 2.下面哪種數據結構對更新由固定長度的整數組成的列表效率最高:
- 3.假設棧和隊列是已提供的非透明數據類型,僅實現了元素增加、元素刪除、以及是否爲空的測試。一個程序員要計算一個棧或者隊列 C 的元素個數,而 C 當前的狀態是 t 並且只能使用一個輔助的棧或隊列 D。C 和 D 可以被任何合理的方式使用,但計數之後 C 必須恢復到原來的狀態 t。下面哪些選項可以實現上述的計數操作?
- 4.一個哈希函數 h 將 16 比特的輸入映射到一個 8 比特的哈希值。假設給定任意一個包含 1000 個不同輸入的集合,都至少有 k 個輸入會被 h 影射到同一個哈希值。這個 k 的最大值是多少?
- 5.以下哪種數據結構可以用來有效的調度一個共享計算機上的工作,其可以跟蹤需要完成的工作和它們的相對優先級?
- 6.在一個長度爲 n 的優先隊列中插入一個新元素的複雜度是?
- 7.一棵滿二叉樹是一棵有根樹,其所有非葉節點都有兩個孩子節點。一棵有 50 個葉節點的滿二叉樹有幾個非葉節點?
- 8.在一棵存儲於數組的二叉樹中,索引號爲 n 的節點的孩子節點的索引號是多少?假定根節點的索引號爲 0。
- 9.假設我們有一個包含 6 個元素、使用森林表示法的不相交集合(並查集)。其初始父親數組爲[0,1,2,3,4],即每個元素屬於一個不同的集合。當我們進行一系列按秩合併(或等價地,按高度合併)操作之後,下列哪一個可能是最終的父親數組?
- 10.Kruskal 算法和 Prim 算法是計算圖中最小生成樹的兩個經典算法,以下哪些項是肯定正確的?
- 11.給定一個以鄰接矩陣表示的帶權有向圖 W=(wij),其中 wij 表示(i,j)的權值。假設該圖不包含非負權值環,並且含有 n>3 個節點,如果採用基於矩陣乘法的算法解決所有節點對間最短路徑問題,以 Wi 表示矩陣 i 次乘法後的結果,以下那些矩陣肯定包含最短路徑的權值?
- 12.以下哪些項是肯定正確的?
- 13.n 個元素的數組採用 quicksort 算法進行排序,其最壞時間複雜度是?
- 14.對於數組排序,以下哪種情況下應該選擇插入排序?
- 15.如果一個算法通過將問題劃分成若干個沒有重疊的子問題進行解決,那麼該算法稱爲:
- 三.多選題(5 題,每題 2 分)
- 四.棧(20 分)
- 五.二叉搜索樹(20 分)
- 六.圖的表示(20 分)
- 七. 圖的遍歷(20 分)
- 八.排序(20 分)
基礎知識
漸進符號
:最壞時間複雜度
:最好時間複雜度
:包含最好最壞複雜度(好像不太對)
:感覺就是數學裏的高階無窮小的意思
完全二叉樹,滿二叉樹
完全二叉樹:就是從上到下,從左到右一個一個填,沒有跳着填,但是最下面一層可能每沒填完
滿二叉樹:就是每一層都會填滿
內部節點:就是不要最後一層的點,因此高度爲h(根節點高度爲0)的完全二叉樹和滿二叉樹的內部節點都是
一.判斷題(10 題,每題 2 分)
1.若函數 以及 , 則 是 並且 是 .
F
2用簡單均勻的哈希函數將 n 個不同的 keys 映射到一個長度爲 m 的數組,集合{{k, l}: k≠l and h(k) = h(l)}的期望大小是 n/m.
3 .一個有n個節點的有向無環圖最多有n(n-1)/2條邊。
T
4 .在圖深度優先遍歷 DFS 算法中,對於圖 G 任意兩點節點 u 和 v,如果 u 的結束時間大於 v 的結束時間,並且 u 和 v 在同一個 DFS 樹中,那麼在此 DFS 樹中 u 是 v 的先驅。
T
就是回溯的時候先驅後回溯哇
5 .給定一個長度爲 n、包含 100 個變量的布爾公式 F,判斷 F 是否可滿足是 NP-complete, 假設 P≠NP.
二.單選題(15 題,每題 2 分)
1.假設一個棧由一個線性鏈表實現,其中僅有一個指針指向鏈表的第一個元素(棧頂)。下面哪一個關於進棧和出棧操作的算法複雜度是正確的?
A.(1) O(1) (2) O(1)
B.(1) O(1) (2) O(n)
C.(1) O(n) (2) O(1)
D.(1) O(n) (2) O(n)
E.(1) O(log n) (2) O(1)
A
2.下面哪種數據結構對更新由固定長度的整數組成的列表效率最高:
A.棧
B.鏈表
C.數組
D.順序文件
E.二叉搜索樹
C
3.假設棧和隊列是已提供的非透明數據類型,僅實現了元素增加、元素刪除、以及是否爲空的測試。一個程序員要計算一個棧或者隊列 C 的元素個數,而 C 當前的狀態是 t 並且只能使用一個輔助的棧或隊列 D。C 和 D 可以被任何合理的方式使用,但計數之後 C 必須恢復到原來的狀態 t。下面哪些選項可以實現上述的計數操作?
I. C 是隊列並且 D 是隊列
II. C 是棧並且 D 是棧
III. C 是隊列並且 D 是棧
A.無選項
B.I 和 II
C.I 和 III
D.II 和 III
E.I,II 和 III
B或者E
關鍵就是沒說是一趟還是兩趟
4.一個哈希函數 h 將 16 比特的輸入映射到一個 8 比特的哈希值。假設給定任意一個包含 1000 個不同輸入的集合,都至少有 k 個輸入會被 h 影射到同一個哈希值。這個 k 的最大值是多少?
A.3
B.4
C.64
D.256
B
2^8=256
就是把1000個東西放進256個格子裏,平攤下來3個多
5.以下哪種數據結構可以用來有效的調度一個共享計算機上的工作,其可以跟蹤需要完成的工作和它們的相對優先級?
A.優先隊列
B.數組
C.鏈表
D.堆棧
A
6.在一個長度爲 n 的優先隊列中插入一個新元素的複雜度是?
A.O(1)
B.O(lg n)
C.O(n)
D.O(n lg n)
B
7.一棵滿二叉樹是一棵有根樹,其所有非葉節點都有兩個孩子節點。一棵有 50 個葉節點的滿二叉樹有幾個非葉節點?
A.25
B.49
C.50
D.51
E.100
B
8.在一棵存儲於數組的二叉樹中,索引號爲 n 的節點的孩子節點的索引號是多少?假定根節點的索引號爲 0。
A.𝑛 × 2 , 𝑛 × 2 + 1
B. + 1 , + 2
C.𝑛 × 2 + 1 , 𝑛 × 2 + 2
D.2𝑛 , 2𝑛 + 1
C
9.假設我們有一個包含 6 個元素、使用森林表示法的不相交集合(並查集)。其初始父親數組爲[0,1,2,3,4],即每個元素屬於一個不同的集合。當我們進行一系列按秩合併(或等價地,按高度合併)操作之後,下列哪一個可能是最終的父親數組?
A.[1,1,1,4,0]
B.[2,0,2,0,2]
C.[1,4,2,0,0]
D.[3,2,4,4,4]
B
應該就是選個儘量矮一點的樹
原來並查集除了路徑壓縮還有按秩合併的方法啊~
10.Kruskal 算法和 Prim 算法是計算圖中最小生成樹的兩個經典算法,以下哪些項是肯定正確的?
i. Kruskal 算法是一種貪心算法。
ii. Kruskal 算法是一種動態規劃算法。
iii. Prim 算法是一種貪心算法。
iv. Prim 算法是一種分治算法。
A.i 和 iii
B.i 和 iv
C.ii 和 iii
D.ii 和 iv
A
11.給定一個以鄰接矩陣表示的帶權有向圖 W=(wij),其中 wij 表示(i,j)的權值。假設該圖不包含非負權值環,並且含有 n>3 個節點,如果採用基於矩陣乘法的算法解決所有節點對間最短路徑問題,以 Wi 表示矩陣 i 次乘法後的結果,以下那些矩陣肯定包含最短路徑的權值?
i. , ii. , iii. , iv.
A.i
B.ii
C.ii 和 iii
D.ii, iii 和 iv
12.以下哪些項是肯定正確的?
i.給定一個有向圖 G=(V,E),G 的關聯圖是一個圖 G’=(V’,E’),其中 V’中的節點是 G 的強連通分量,對於任意一對節點 S,TV’, (S,T) E’當且僅當存在 uS 和 vT 滿足(u,v) E。G’是一個有向無環圖。
ii.考慮帶權圖 和 ,所有 W 和 W’中的權值爲正數,如果 G 和 G’有相同的節點和邊,並且對於任意邊 e 滿足 ,那麼對於任意節點對 u,vV, G’中的 u 和 v 之間的最短路徑同樣是 G 中的 u 和 v 之間的最短路徑。
iii.考慮帶權圖 和 ,所有 W 和 W’中的權值爲正數,如果 G 和 G’有相同的節點和邊,並且對於任意邊 e 滿足 ,那麼對於任意節點對 u,vV, G’中的 u 和 v 之間的最短路徑同樣是 G 中的 u 和 v 之間的最短路徑。
A.i
B.i 和 ii
C.i 和 iii
D.ii 和 iii
13.n 個元素的數組採用 quicksort 算法進行排序,其最壞時間複雜度是?
A.O(n log n)
B.O(n)
C.O()
D.O(log n)
C
快排的期望複雜度纔是nlogn
最快複雜度是 n^2
14.對於數組排序,以下哪種情況下應該選擇插入排序?
A.當數組很大時。
B.當數組中只有少數元素不在其排序後的位置時。
C.當數組內容是字符串而非數值時。
D.插入排序永遠不是一個好的選擇。
B
15.如果一個算法通過將問題劃分成若干個沒有重疊的子問題進行解決,那麼該算法稱爲:
A.遞歸法
B.動態規劃
C.分治法
D.貪心算法
C
三.多選題(5 題,每題 2 分)
1.閱讀下面的陳述,並選擇正確的選項:
A. = O()
B. = O()
C. =O()
D. =O()
E.None of the above
ABC
據說是同階低階都行🙃
根據霍同學提供的可靠情報,感覺很有道理~
2.在一個字符編碼問題中,如果一個文件只由 a, b, c 組成,它們出現的頻率分別是 45, 13, 12, 以下哪些編碼是最優的?
A.a:000, b:010, c:101.
B.a:000, b:010, c:100.
C.a:00, b:01, c:10.
D.a:1, b:01, c:00.
D
3.一棵二叉樹的前序遍歷是 ABCDE,後序遍歷是 CBEDA,它的中序遍歷有可能是哪個?
A.BACDE
B.BCADE
C.CBAED
D.ACBED
BC
4.以下哪一個或哪些是下圖的拓撲排序?
A.2,1,9,3,4,7,5,6,8
B.2,1,9,4,5,7,3,6,8
C.2,9,1,4,7,3,5,6,8
D.2,1,4,7,5,9,3,6,8
E.2,9,1,4,3,7,5,6.8
ACE
5.對於可以通過動態規劃可以解決的問題,以下哪些表述是正確的?
A.這些問題無法通過貪心算法解決。
B.這些問題具有最優子結構性質。
C.這些問題可以劃分成若干個重疊子問題。
D.動態規劃的時間複雜度和空間複雜度相等。
BC
四.棧(20 分)
設計一個棧,除了提供入棧和出棧操作,還提供 min 函數,返回棧裏的最小元素。所有三個函數都應該具有 O(1)的複雜度。請描述你的設計。
五.二叉搜索樹(20 分)
根據以下二叉搜索樹回答:
1.從一個空的二叉搜索樹開始,以下哪個插入序列可以生成以上二叉搜索樹?(4 分)
A.3, 7, 1, 5, 9, 4
B.3, 7, 4, 1, 5, 9
C.3, 4, 7, 5, 9, 1
D.3, 1, 7, 9, 5, 4
B
2. 以上二叉樹的中序遍歷是?(4 分)
①③④⑤⑦⑨
3. 畫出把樹中根節點 3 去掉後的二叉搜索樹。(6 分)
4.畫出把 3 節點重新插入到第 3)小問所得樹之後的二叉搜索樹。(6 分)
六.圖的表示(20 分)
給定一個圖的鄰接表表示
1.畫出該圖;(10 分)
2.畫出該圖的鄰接矩陣表示。(10 分)
七. 圖的遍歷(20 分)
考慮以下修改後的圖遍歷算法:
1: Visited = {};
2: ModTraversal (v: Node, G: Graph) {
3: // assume G.V is the set of nodes in the graph G
4: // G.E is the set of edges in the graph G
5: Queue active = Ø; // a queue that is first in first out
6: forall (v,w) in G.E do { // an ascending alphabetical
// order of w’s
7: if (not wVisited) then {
8: Visit (w);
9: Visited = Visited∪{w};
10: ENQUEUE(active ,w) ;
11: } ;
12: } ;
13: while (active ≠ Ø) do {
14: w = DEQUEUE(active);
15: ModTraversal (w,G) ;
16: } ;
17: }
1.給出下圖用上述遍歷算法遍歷時的節點訪問順序,遍歷算法採用以下方式調用:
Visited = Visited∪{a}; // Visited={a}
ModTraversal (a, G) ;
(a 是遍歷的起始節點;當存在多個同一個節點出發的邊時,上述算法行 6 以邊的目標節點的升序訪問。比如,連接節點 a 的邊有三條(a,b),(a,e),(a,f),由於 b<e<f, (a,b)必須在(a,e)和(a,f)前訪問, (a,e)必須在(a,f)前訪問)(8 分)