資訊處理 109 年資料結構考古題
題目為考試當年公告版本,實務標準請以現行規範為準。
資料庫應用中,需要根據主鍵值(Primary Key)建立索引檔,索引檔的 建立常使用B-tree 樹狀結構,今有一串資料,其主鍵值分別為:44, 29, 39, 64, 67, 59, 69, 49,畫出將此串資料建成order 3 的B-tree,接著,畫出從此串 資料,新增(Insert)主鍵值55 後order 3 的B-tree,最後,畫出從此串資料 刪除(Delete)主鍵值49 後order 3 的B-tree。(20 分)
給定一個無向圖(Undirected Graph)G 的鄰接列表(Adjacency List)如圖, 試依據該列表提供的資訊繪製出對應的無向圖G,然後由節點(Vertex)H 為 起始點繪製Depth First Search(DFS)與Breadth First Search(BFS)生成樹 (Spanning Tree),遇有多個節點可被走訪時,字母順序越前面的節點,其 被走訪的優先順序就越高。(20 分) 無向圖G 鄰接列表
新冠肺炎肆虐全球,目前世界各國生物及醫學實驗室均在尋找新型冠狀病 毒的基因,假設新型冠狀病毒的基因由A, T, C, G, H, M 核苷酸所組成, 今有一新型冠狀病毒的基因為ATATATCCHCGMCMA,請使用霍夫曼演 算法(Huffman Algorithm)設計霍夫曼樹(Huffman Trees),並設計出一 編碼表(Code Words),依序分別寫出A, T, C, G, H, M 核苷酸的編碼位 元數,將此新型冠狀病毒基因以最少位元數(Minimum Bit Strings)編碼, 並計算出最少位元數(Minimum Bit Strings)。(20 分)
給予一串資料:45,30,40, 65,68,60, 70,50,將此串資料依序建成一max-heap 樹,並說明如何從此max-heap 樹進行由小至大的排序(Sorting)。(20 分)
給予兩線性鏈結串列,其節點C 語言的宣告如下:(20 分) #include <stdio.h> #include <stdlib.h> struct node{ int data; struct node *next; }; typedef struct node *NODEPTR; 此兩線性鏈結串列,分別由指標plist1 與plist2 指在串列首,請完成下列 程式片段,將plist2 所指串列接在plist1 所指串列後面。 void concate(NODEPTR plist1, NODEPTR plist2) { NODEPTR p; }
9 10 11 12 四、㈠在一棵高度為h(h=0,1,2,…)的AVL tree 中:⑴高度為6之AVL tree 最多 可能有幾個nodes?最少可能有幾個nodes?(假設root 之h=0)(6分) ⑵假設此樹共有45個nodes。請問此AVL tree 可能最高之高度及最矮 之高度各為何?(6分) ㈡請將下列數字{17, 60, 24, 5, 7}逐步插入圖1的AVLtree 中,並平衡之。 (12分) 圖1 五、請利用堆積排序法(Heap Sort)將圖2逐步建立成Min Heap,並將數字 從小到大逐一列舉。(10分) 圖2 六、㈠請利用KMP(Knuth, Morris, Pratt)演算法寫出失敗函數(failure function)之定義。(4分) ㈡找出pattern “abcdabcabcdabcdabc”之失敗函數(failure function)值(請 填入表2 failure value 中)。(14分) ㈢假設㈡之pattern 嘗試在string “abcdabcabcdabcabcda…..”找出pattern。 當pattern 從index 0開始比對到index 13都一樣,而在index 14時發現 字母不一樣,請問pattern 如何利用failure function 所得之結果很快找 到下一個要對應之位置?也就是pattern 的那一位置的值要位移到 string 的那一對應位置。(4分) 表2 index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 string a b c d a b c a b c d a b c a b c d a pattern a b c d a b c a b c d a b c d a b c failure value ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?