Môn thi Cấu trúc dữ liệu và giải thuật KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Họ và tên BỘ MÔN KHOA HỌC MÁY TÍNH MSSV ĐỀ THI CUỐI KÌ MÔN THI CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NGÀY THI 16/12/2013 THỜI GIAN 12[.]
Trang 1KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH
Họ và tên: ……….
ĐỀ THI CUỐI KÌ MÔN THI: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Sinh viên được phép sử dụng tài liệu Sinh viên không được phép sử dụng tài liệu
MÃ ĐỀ: 1001
Hướng dẫn làm bài:
Sinh viên phải ghi họ tên và mã số sinh viên vào đề thi Sinh viên phải nộp lại đề thi
Phần I: TRẮC NGHIỆM Sinh viên làm trên đề thi bằng cách khoanh tròn câu trả lời đúng nhất.
Phần II: ĐIỀN CHỖ TRỐNG Sinh viên làm trên đề thi
Phần III: THIẾT KẾ GIẢI THUẬT Sinh viên làm trên giấy thi
PHẦN I: TRẮC NGHIỆM (3.0 điểm) Để được trọn số điểm này, sinh viên chỉ cần trả lời đúng 10 câu
1 Giải thuật sắp xếp nào dưới đây có độ phức tạp thời gian như nhau trong cả 3 trường hợp tốt nhất, xấu nhất và trung bình
A Giải thuật sắp xếp chèn trực tiếp(straight insertion sort)
B Giải thuật sắp xếp chọn trực tiếp(straight selection sort)
C Giải thuật sắp xếp nổi bọt (bubble sort)
D Giải thuật sắp xếp nhanh (quick sort)
2 Giải thuật sắp xếp nào dưới đây có độ phức tạp là O(n) trong trường hợp tốt nhất
A Giải thuật sắp xếp chọn trực tiếp(straight selection sort)
B Giải thuật sắp xếp heap (heap sort)
C Giải thuật sắp xếp nổi bọt (bubble sort)
D Giải thuật sắp xếp nhanh (quick sort)
3 Giả sử ta dùng dãy để biểu diễn heap, hãy cho biết trong những dãy số dưới đây, dãy nào KHÔNG phải là biểu diễn của heap
A 19, 17, 16, 12, 9, 15, 1, 2, 11, 7, 3, 10, 14
B 19, 17, 16, 15, 14, 12, 11, 10, 9, 7, 3, 2, 1
C 1, 2, 3, 7, 9, 10, 11, 12, 14, 15, 16, 17, 19
D 19, 17, 16, 11, 9, 15, 1, 2, 12, 7, 3, 10, 14
Trang 24. Cho đồ thị có hướng như hình vẽ, đâu KHÔNG phải là thứ tự topo của đồ thị
A 1, 5, 2, 6, 3, 4
B 1, 5, 6, 2, 3, 4
C 5, 1, 6, 3, 4, 2
D 5, 1, 2, 6, 4, 3
5 Cho biết nhận định nào dưới đây là ĐÚNG
A Cây B-tree là cây nhị phân
B Cây AVL là cây nhị phân
C Cả A và B đều đúng
D Cả A và B đều sai
6 Cho đồ thị liên thông G với tập các đỉnh là V = (a, b, c, d, e, f), tập các cạnh là E={(a,b), (a,e),(a,c),(b,e),(e,d),(d,f),(f,c)} Từ đỉnh a, tiến hành duyệt đồ thị theo chiều sâu, ta sẽ được kết quả (Lưu ý: trong trường hợp có nhiều đỉnh được chọn, các đỉnh sẽ được đưa vào ngăn xếp theo thứ tự trong bảng chữ cái)
7 Cho cây AVL như hình vẽ Chèn thêm nút có giá trị 6 vào cây AVL Hãy cho biết khi điều chỉnh cây, tại nút gốc ta thực hiện thao tác nào dưới đây
A Thực hiện phép quay đơn
B Thực hiện phép quay kép
C Không cần phải thực hiện thao tác quay
D Xóa nút gốc
8 Cho dãy số (5, 12, 20, 26, 37, 42, 46, 50, 64), nếu sử dụng tìm kiếm nhị phân, khi tìm phần tử có giá trị 26 cần phải thực hiện bao nhiêu phép so sánh
9 Đối với cây AVL, hệ số cân bằng của mỗi nút trong cây có giá trị nằm trong đoạn
A.[-1, 1] B.[-2, 2] C.[0, 1] D.[1, 2]
10 Cho dãy số (7, 3, 5, 9, 1, 12), sử dụng min-heap tiến hành sắp xếp dãy số trên Giả sử min-heap được biểu diễn dưới dạng dãy, các phần tử được chèn vào cây tương ứng với thứ tự trên dãy Vậy min-heap kết quả là:
A 1, 3, 5, 7, 9, 12 B 1, 3, 5, 9, 7, 12
C 1, 5, 3, 7, 9, 12 D 1, 5, 3, 9, 12, 7
11 Để nâng cao hiệu quả tìm kiếm đối với bảng hash, có thể sử dụng những biện pháp sau:
a)Thiết kế hàm hash sao cho giảm xung đột b)Khi xử lý xung đột cần tránh hiện tượng gom cụm
Trang 3c)Tăng hệ số tải α (load factor) Nhận định nào sau đây đúng
C chỉ a) và b) đúng D chỉ b) và c) đúng
12 Tạo bảng hash từ dãy số (23, 44, 36, 48, 52, 73, 64, 58), các phần tử được đưa vào bảng hash tương ứng với thứ tự trên dãy, sử dụng hàm H(k)=k%13 để tính địa chỉ, giả sử bảng hash có không gian địa chỉ là H[0 15], sử dụng phương pháp thăm dò tuyến tính (linear probing) để giải quyết xung đột Hãy cho biết địa chỉ hash của phần tử 36.
PHẦN II: ĐIỀN CHỖ TRỐNG (4.0 điểm) Để được trọn số điểm này, sinh viên chỉ cần trả lời đúng
10 câu
1 Đối với phương pháp lưu trữ và tìm kiếm hash, hai vấn đề được quan tâm nhất là _ _ và _
2 Giả sử ta biểu diễn min-heap dưới dạng dãy, hiện tại ta có min-heap (10, 21, 35, 32, 37, 56,
64, 48, 85, 63, 71, 92) Hãy cho biết min-heap này (dưới dạng dãy) sau khi chèn thêm vào min-heap phần tử có giá trị 9
3 Giả sử ta biểu diễn min-heap dưới dạng dãy, hiện tại ta có min-heap (10, 21, 35, 32, 37, 56,
64, 48, 85, 63, 71, 92) Hãy cho biết min-heap này (dưới dạng dãy) sau khi
4 bỏ phần tử nhỏ nhất
4 Xây dựng cây B-tree bậc 3 tương ứng với dãy số (7, 13, 5, 20, 23, 4, 3, 16, 14, 18, 31) Giả
sử các phần tử được chèn vào cây tương ứng với thứ tự trên dãy Hãy vẽ cây kết quả
5 Hãy vẽ cây B-tree bậc 3 tương ứng với dãy số (7, 13, 5, 20, 23, 4, 3, 16, 14, 18, 31) sau khi
đã xóa các phần tử 16, 18 và 23 khỏi cây Chỉ cần vẽ kết quả cuối cùng
Trang 42 0
3 0 2 5
3 5
1 8 1 9
1
3
1
65 52
50
V1
V2
V3 V4 V5 V6
V7
60 50
40
45 5 70
42 30
6 Cho dãy các từ khóa B = {56, 23, 41, 79, 38, 62, 18}, giả sử bảng hash có không gian địa chỉ
là H[0 10], cho hàm hash H(key) = key % 11, đồng thời sử dụng phương pháp thăm dò tuyến tính (linear probing) để giải quyết xung đột Hãy vẽ bảng hash
7 Cho cây AVL như hình vẽ Hãy vẽ cây AVL này sau khi chèn nút có giá trị 17 (chỉ cần vẽ kết quả cuối cùng, không cần vẽ các bước trung gian)
8 Cho cây AVL như hình vẽ Hãy vẽ cây AVL này sau khi xóa nút có giá trị 20 (chỉ cần vẽ kết quả cuối cùng, không cần vẽ các bước trung gian)
9 Cho một bảng hash như hình vẽ dưới:
Biết rằng hàm hash H(key) = key % 13, xử lý xung đột bằng hash kép (double hashing) với HP(k, i) = (H(k) + i*H1(k)) % 13 với H1(k) = (k % 11) + 1, hãy cho biết khi tìm kiếm các từ khóa 35, 20, 33 và 48 cần phải sử dụng đến hàm HP lần lượt bao nhiêu lần
_
10 Cho đồ thị như hình vẽ dưới, sử dụng giải thuật Prim để tìm cây phủ tối thiểu Giả sử bắt đầu
từ đỉnh A, hãy vẽ cây phủ tối thiểu
5 0
8 0
3 0 2
6 0
7 5
Trang 511 Dựa trên giải thuật sắp xếp nổi bọt (Bubble sort) được trình bày trong bộ slide môn học, hãy
vẽ bảng biểu diễn kết quả của mỗi bước thực thi của giải thuật Hàng đầu tiên trong bảng là dãy số ban đầu, hàng thứ 2 là kết quả sau bước thực thi thứ nhất Hãy điền vào những hàng còn lại
12 Cho đồ thị như hình vẽ sau:
a) Bắt đầu từ đỉnh 0, kết quả duyệt đồ thị theo chiều sâu là:
b) Bắt đầu từ đỉnh 1, kết quả duyệt đồ thị theo chiều rộng là:
Lưu ý: trong trường hợp nhiều đỉnh có thể được chọn, các đỉnh sẽ được đưa vào Stack (hoặc Queue) theo thứ tự trong bảng chữ cái
PHẦN III: THIẾT KẾ GIẢI THUẬT (3.0 điểm)
1. Thiết kế hàm Partition cho giải thuật Quick sort (1.0 điểm)
Trong giải thuật Quick sort, việc lựa chọn phần tử bản lề (pivot) có ảnh hưởng đến hiệu quả của giải thuật, hơn nữa phần tử bản lề không nhất thiết phải là phần tử đầu tiên của dãy Một lựa chọn khác là chúng ta có thể chọn giá trị trung bình (hoặc gần với giá trị trung bình nhất) của các phần tử trong dãy làm phần tử bản lề Hãy viết hàm Partion thực hiện việc lựa chọn này Yêu cầu:
- Hàm Partition có prototype: int Partition(int arr[],int l,int h)
- Sinh viên nêu ý tưởng giải thuật
- Sinh viên có thể dùng mã giả hoặc ngôn ngữ C/C++ để viết
2. Phán đoán trong đồ thị có tồn tại đường đi từ đỉnh A đến đỉnh B (2.0 điểm)
Giả sử đồ thị có hướng lưu dưới dạng danh sách kề được định nghĩa như sau:
GraphNode
vertex <int> // (key field)
adjVertex<LinkedList of< int >>
indegree <int>
outdegree <int>
isMarked <boolean>
0
1
6 5
9 4
8
3 7
2
Trang 6End GraphNode
DiGraph
digraph <ContiguousList<of<GraphNode>>
End DiGraph
Hãy viết giải thuật cho biết có đường dẫn từ đỉnh A đến đỉnh B hay không (A ≠ B) Yêu cầu:
- Sinh viên nêu ý tưởng giải thuật
- Có thể viết giải thuật bằng mã giả hoặc bằng ngôn ngữ C/C++
- Hàm có prototype: bool FindPath(DiGraph& g, int A, int B)
- Sinh viên có thể dùng thêm các cấu trúc dữ liệu phụ trợ như ngăn xếp, hang đợi
-HẾT -Chủ nhiệm Bộ môn
Chữ ký:
Họ tên:
Giảng viên ra đề Chữ ký:
Họ tên: