You are on page 1of 4

Cấu trúc dữ liệu & Giải thuật Bài tập ôn tập cuối kỳ TS.

Phạm Văn Huy

HEAP

Câu 1. Cho cây Max Heap như hình

a) Chèn phần tử 85 vào heap


b) Lấy phần tử lớn nhất khỏi heap từ a)
c) Biểu diễn heap ở dạng mảng

Câu 2. Cây Binary Max Heap: Cho dãy các khoá: 20 30 40 15 25 23 5 22 35 2

d) Dựng cây Binary max heap theo 2 cách (chèn lần lượt hoặc heapify dãy)
e) Thực hiện dựng lại cây khi lấy các phần tử max ra khỏi cây.
f) Thực hiện từng bước sắp tăng dần dựa trên cây binary max heap.

ĐỒ THỊ

Câu 3. Tìm đường đi ngắn nhất từ s đến t trong đồ thị sau:

Hướng dẫn: Đồ thị đã cho có trọng số âm (nhưng không có chu trình âm) nên có thể sử dụng thuật toán
Bellman-Ford để tìm đường đi ngắn nhất.

Câu 4. Tìm đường đi ngắn nhất từ 0 đến các đỉnh còn lại trong đồ thị sau:

Hướng dẫn: Đồ thị đã cho không trọng số âm nên có thể sử dụng thuật toán Dijkstra để tìm đường đi ngắn
nhất từ một đỉnh đến tất cả các đỉnh còn lại.

- Nhãn mỗi đỉnh gồm 2 phần: độ dài đường đi hiện có và đỉnh trước trực tiếp trên đường đi đến nó.
- Tại mỗi bước, chọn đỉnh có độ dài đường đi hiện có ngắn nhất để cố định nhãn và đi tiếp các đỉnh kề

1
Cấu trúc dữ liệu & Giải thuật Bài tập ôn tập cuối kỳ TS.Phạm Văn Huy

Câu 5. Tìm cây khung (cây bao trùm) tối thiểu (MST) trong đồ thị sau bằng 02 cách

Hướng dẫn: Cây bao trùm tối thiểu của một đồ thị liên thông là một tập hợp con của các cạnh tạo thành cây bao
gồm mọi đỉnh, trong đó tổng trọng số của tất cả các cạnh trong cây là cực tiểu.

- Thuật toán Kruskal lần lượt chọn các cạnh trong danh sách không giảm theo trọng số và không chọn
cạnh tạo chu trình trong quá trình xây dựng cây.
- Thuật toán Prim chọn một đỉnh xuất phát lần lượt xét các đỉnh chưa thuộc cây (sử dụng một tập đánh
dấu các đỉnh đã thuộc cây), và chọn cạnh nhỏ nhất nối đỉnh thuộc/chưa thuộc cây.

Câu 6. Duyệt đồ thị bằng thuật toán ưu tiên theo chiều rộng (BFS), và chiều sâu (DFS). Chọn đỉnh gốc
là A (ưu tiên chọn đỉnh kế tiếp theo tứ tự alphabet, hoặc thứ tự số tự nhiên). Mô tả nội dung thay đổi
của hàng đợi (queue) đối với BFS và ngăn xếp (stack) đối với DFS cùng với kết quả tương ứng tại mỗi
bước.

Hướng dẫn: Duyệt đồ thị là quá trình thăm các đỉnh theo một thứ tự quy định.

- Duyệt ưu tiên theo chiều rộng (BFS): Sử dụng hàng đợi lưu trữ các đỉnh có thể đi đến, xuất phát từ
một đỉnh cho trước. Lần lượt lấy các đỉnh trong hàng đợi và đi đến các đỉnh kề tiếp theo và chờ xử lý
theo thứ tự đã viếng thăm sử dụng hàng đợi.
- Duyệt theo chiều sâu (DFS): Tương tự BFS nhưng sử dụng ngăn xếp để lưu trữ các đỉnh chờ xử lý.
Duyệt theo chiều sâu ưu tiên đi càng xa đỉnh xuất phát trước khi xử lý các đỉnh kề tiếp theo (sẽ chờ
quay lui lại để xử lý tiếp các đỉnh còn chờ).

BINARY SEARCH TREE (BST)

Câu 7. Cho dãy các khoá: 20, 30, 15, 10, 40, 5, 22, 35, 2, 45

a) Dựng cây BST với các khoá trên


b) Chạy từng bước duyệt cây BST với các khoá trên theo thứ tự: LNR, LRN, NLR, RNL, RLN, NRL
c) Tìm predecessor, successor cho các khoá: 2, 45, 20.
d) Xoá các node: 20, 10, 5.
e) Viết thuật toán: tìm max, min, tính tổng cây BST; tổng cây con bên trái, bên phải của Node x.

Câu 8. Cho dãy các khoá: 20 30 40 15 25 23 5 22 35 2.

a) Dựng cây AVL với các khóa đã cho.


b) Minh họa từng bước xóa các khóa: 2, 5, 15

2
Cấu trúc dữ liệu & Giải thuật Bài tập ôn tập cuối kỳ TS.Phạm Văn Huy
Hướng dẫn:

BST là cây nhị phân trong đó giá trị tại mỗi nút thỏa con trái < nút cha < con phải

Cấu trúc BST giúp cho việc tìm kiếm một giá trị bất kỳ (lớn nhất, nhỏ nhất, kề trước, kề sau) với độ
phức tạp gần với O(logn) (tùy vào chiều cao của cây, tốt nhất khi cây cân bằng).

Việc chèn, tìm kiếm một khóa trên BST được thực hiện bằng việc so sánh với khóa tại nút gốc của cây
con tại mỗi bước và đi về hướng cây con phù hợp. Cây BST có thể được tạo dựng bằng cách dùng
phép chèn BST lần lượt các khóa đã cho.

Duyệt cây (Traverse) BST là quá trình đi đến tất cả các nút theo một thứ tự quy định trên cây tại. Kết
quả phép duyệt là dãy số được liệt kê theo thứ tự của phép duyệt. Ví dụ, phép duyệt theo thứ tự LNR
(Left → Node → Right) sẽ thực hiện Duyệt cây con trái (đệ quy) → IN nút cha → Duyệt cây con phải
(đệ quy)

Cho một khóa X trên BST,

- Predecessor(X) là phần tử kề trước X (khóa lớn nhất trong số những khóa nhỏ hơn X).
Trên BST đó chính là nút PHẢI NHẤT của CÂY CON TRÁI của cây gốc X.
- Successor là phần tử kề sau X (khóa nhỏ nhất trong số những khóa lớn hơn X)
Trên BST đó chính là nút TRÁI NHẤT của cây con PHẢI của cây gốc X.

Xóa một khóa (nút) trên BST sẽ đơn giản đối với trường hợp nút cần xóa có ít hơn 2 con. Trong trường
hợp có 2 con, phải thay thế nút cần xóa bằng phần tử kề sau (successor) của nút cần xóa.

An AVL tree is a balanced binary search tree. In an AVL tree, balance factor of every node is
either -1, 0 or +1. The balance factor = height of left subtree - height of right subtree
(Every AVL Tree is a binary search tree but every Binary Search Tree need not be AVL tree.)

Rotation is the process of moving nodes either to left or to right to make the tree balanced.

3
Cấu trúc dữ liệu & Giải thuật Bài tập ôn tập cuối kỳ TS.Phạm Văn Huy

HASHING (BĂM)

Câu 9. Phương pháp băm được sử dụng nhằm mục đích gì? Trình bày 02 phương pháp băm (hàm
băm) và 02 phương pháp giải quyết đụng độ (collision resolution) mà em biết.

Câu 10. Cho hash table có kích thước m = 7.

1. Minh họa các bước lần lượt thêm các phần tử sau vào hash table: 8 10 1 6 5 20 15 sử dụng hash
function: hash(k) = k%m (phần dư). Nếu xảy ra đụng độ hãy sử dụng phương pháp Linear
Probing để giải quyết đụng độ.
2. Cho biết có bao nhiêu phép so sánh khi tìm kiếm phần tử 15 trên hash table?
3. Minh họa các bước lần lượt xoá các phần tử 1, 6, 15. Thêm phần tử 22, 27, 29.

LINKED-LIST

Câu 11. Cho sơ đồ lớp danh sách liên kết (linked-list) như hình:

1. Viết các phương thức cho lớp MyLinkedList cài đặt ListInterface như sơ đồ trên. Chú ý sử
dụng kiểu dữ liệu tổng quát E (Generics trong Java)
2. Sử dụng sơ đồ lớp như câu 1 để cài đặt cấu trúc dữ liệu Stack và Queue.

SORTING

Câu 12. Thuật toán Sắp xếp


1. Cho biết ý tưởng của các thuật toán sắp xếp:
Selection, Bubble, Insertion, Merge sort, Quick sort, radix sort
2. Cho mảng các số nguyên: 8 10 1 6 5 20 30 15.
Chạy từng bước 6 thuật toán trên cho mảng này

You might also like