You are on page 1of 5

Student Name: Student’s ID:

CSD201 – Heap Data Structures


Câu 1. Liên kết khái niệm và mô tả để tạo thành sự diễn dịch đúng: (4 phút)
Khái niệm Mô tả Trả lời
A. Là một cấu trúc dạng cây thỏa các ràng buộc:
+ Là cây NHỊ PHÂN đây đủ hoặc gần đầy đủ, và
+ Nếu nút A là cha của nút B thì thuộc tính khóa của A và thuộc tính khoa
1. Heap 1.C
của B sẽ có thứ tự giảm dần (max-heap) hoặc tăng dần (min-heap) và tính
chất có thứ tự này được đảm bảo trong mọi quan hệ cha con trong cây.
+ Mỗi nút cha trong heap có tối đa HAI nút con.
B. Là một cấu trúc dạng cây nhị phân thỏa mãn
thêm các tính chất sau đây:
2. Heap nhị + Là cây nhị phân đầy đủ hoặc gần đầy đủ và 2.A
phân + Hình bên là đúng:

C. Là một cấu trúc dạng cây thỏa ràng buộc:


+ Một heap là cây ĐA PHÂN đầy đủ hoặc gần đầy đủ, và
3. Max-Heap + Nếu nút A là cha của nút B thì thuộc tính khóa của A và thuộc tính khoa
3B
nhị phân của B sẽ có thứ tự giảm dần (max-heap) hoặc tăng dần (min-heap) và tính
chất có thứ tự này được đảm bảo trong mọi quan hệ cha con trong cây.
+ Mỗi nút cha trong heap có thể có NHIỀU nút con.
D. Là một cấu trúc dạng cây nhị phân thỏa mãn
thêm các tính chất sau đây:
4. Min-Heap
+ Là cây nhị phân đầy đủ hoặc gần đầy đủ, và 4D
nhị phân
+ Hình bên là đúng:

E. Là cây nhị phân mà nếu nó có độ cao h thì số nút trong


5. Insert cây bằng đúng n=2h−1. Hình bên là cây nhị phân đầy đủ
5F
Heap với độ cao là 4 .

6. Extract F. Là thao tác thêm một nút mới vào vị trí cuối cùng của mức lá trong heap
6H
Heap (tính từ trái sang phải).
G. Là cây mà nếu nó có độ cao h thì số nút trong cây
7. Cây nhị thuộc khoảng từ 2h−1 đến 2h−1 . Hình bên là cây nhị phân
7E
phân đầy đủ gần đầy đủ với độ cao là 3.

8. Cây nhị H. Là thao tác xóa phần tử cực trị (max hoặc min) khỏi heap. Phần tử này
phân gần đầy chính là nút gốc của heap. Nút thay thế sẽ là nút cuối cùng tại mức lá (tính 8G
đủ từ trái sang phải) của heap.
Câu 2. Hình nào là heap, hình nào KHÔNG phải là heap? (1 phút)
Heap: B,A
Không phải Heap:C,D

Câu 3. Hình nào là max-heap, hình nào là min-heap, heap đầy đủ, heap gần đầy đủ? (4
phút)

MAX:

MIN:2

Câu 4. Trả lời ngắn, điền vào dấu (…) hoặc chọn ĐÚNG/SAI: (6 phút)
1. Kể tên bốn thao tác phổ biến trên một heap nhị phân: Insert, Extract, Reheap up/down.
2. ĐÚNG/SAI: Có thể dùng mảng để cài đặt heap. Đúng.
3. ĐÚNG/SAI: Không có mối quan hệ nào giữa những nút “anh-em” hoặc “chú-cháu” trong heap.
Sai
4. Việc thêm một nút mới vào heap có thể vi phạm các tính chất của heap. Do đó, ứng dụng cần
thực hiện thao tác …………ReheapUp………………….……………….. để duy trì các tính chất
của heap.
5. Khi xóa một nút khỏi heap cần tìm nút thay thế và do đó có thể vi phạm các tính chất của heap,
ứng dụng cần thực hiện thao tác …………ReheapDown……………...……. để duy trì các tính
chất của heap.
6. Một heap đầy đủ có độ cao h thì số nút của heap là n , n=¿……… 2h−1 . …. ………
7. Một heap gần đầy đủ có độ cao h thì số nút của heap là n ,
n ∈ ( … … 2 … … 2 −1 … … ; … … … … … ).
h−1 h
Câu 5. Chọn ĐÚNG/SAI hoặc giải thích về Big-Oh của thao tác: (5 phút)
1. ReheapUp là O¿ ¿. Đúng
2. ReheapDown là O¿ ¿Đúng
3. BuildHeap là O¿ ¿. Vì sao?
4. InsertHeap là O¿ ¿. Vì sao?
5. DeleteHeap là O¿ ¿

Câu 6. Bài tập xây dựng heap: (30 phút)


1. Minh họa từng bước việc xây dựng max-heap từ dãy số sau: 23 , 7 , 92 ,6 , 12 ,14 , 40 , 44 , 20 , 21
2. Minh họa từng bước việc xây dựng min-heap từ dãy số sau: 23 , 7 , 92 ,6 , 12 ,14 , 40 , 44 , 20 , 21
3. Thực thi từng bước thuật toán Reheap Up trên max-heap sau:

4. Thực thi từng bước thuật toán Reheap Down trên max-heap sau:

Câu 7. Giả sử ta có max-heap như hình sau: (15 phút)

1. Vẽ mảng lưu trữ của heap trong hình trên.


2. Thực hiện 1 lần thao tác extract nút gốc. Vẽ lại heap kết quả sau khi extract.
3. Thêm nút 38 hình vẽ sau khi đã thực hiện hoàn tất câu 2.
Câu 8. Giả sử ta có max-heap được lưu trữ trong mảng như sau: (15 phút)

1. Hãy vẽ max-heap. Cho biết con trái của 14 là nút nào, con trái của 40 là nút nào.
2. Thêm nút 17 vào max-heap, hãy vẽ lại max-heap kết quả.
3. Thực hiện MỘT lần extract nút gốc của max-heap, vẽ lại heap kết quả.
Câu 9. Giả sử một ứng dụng dùng mảng để cài đặt heap, phần tử đầu tiên của mảng có chỉ
số là 0. Bạn hãy trả lời các câu hỏi sau: (7 phút)
1. Nếu một nút có chỉ số là 25 trong mảng thì chỉ số con trái của nút đó là bao nhiêu?
2. Nếu một nút có chỉ số là 25 trong mảng thì chỉ số con phải của nút đó là bao nhiêu?
3. Nếu một nút có chỉ số là 37 trong mảng thì nút cha của nó có chỉ số là bao nhiêu?
4. Mảng nào trong các mảng sau đây là heap:
a. 42 , 35 , 37 ,20 , 14 , 18 , 7 ,10 b. 42 , 35 , 18 ,20 , 14 , 30 , 10 c. 20 , 20 ,20 , 20 , 20 , 20
5. Vẽ mảng kết quả sau khi thực thi BA lần extract trên heap sau: 50 , 30 , 40 ,20 , 10 , 25 ,35 , 10 , 5
6. Vẽ mảng kết quả sau khi thêm 33 , 22 ,8 vào heap sau: 50 , 30 , 40 ,20 , 10 , 25 ,35 , 10 , 5
7. Phỏng vấn: hãy vẽ một cây vừa là heap vừa là cây tìm kiếm nhị phân (BST).
Câu 10. Hãy liên kết một ứng dụng của heap và phần mổ tả tương ứng: (6 phút)
Ứng dụng Mô tả Trả lời
A. Trong nhiều ứng dụng, tồn tại bài toán xét độ ưu tiên của các
đối tượng để tiến hành ưu tiên xử lý. Một đối tượng thường
1. Các thuật toán về lựa chứa nhiều thuộc tính. Ứng dụng thường chỉ quan tâm và ưu
chọn phần tử trong dãy tiên một thuộc tính nào đó để xếp thứ tự xử lý. Ví dụ, các loại
vé máy bay trước khi check-in phải xếp hàng, riêng vé có mã
first-class sẽ được ưu tiên trước và đưa và hàng đợi ưu tiên.
B. Dựa trên cấu trúc dữ liệu dạng heap để tiến hành xếp các
phần tử của một dãy n đối tượng có thuộc tính khóa tăng dần
2. Hàng đợi có độ ưu
hoặc giảm dần bằng cách thực hiện n lần thao tác extract heap
tiên
để lấy ra phần tử cực trị trong dãy và đưa vào một danh sách có
thứ tự.
C. Một số ứng dụng tồn tại bài toán tìm phần tử cực trị thứ k
trong dãy n phần tử. Có ít nhất hai kỹ thuật làm việc này:
1. Xếp thứ tự dãy n phần tử sau đó trả lời hoặc
3. Sắp thứ tự nhờ Heap
2. Dùng heap bằng cách build heap, sau đó extract heap k −1
lần. Nút gốc của heap thu được sau k −1 lần chính là phần tử có
khóa cần tìm.
Câu 11. ĐÚNG/SAI về d-Heap: (6 phút)
1. Một d-heap là trường hợp tổng quát hơn heap nhị phân.
2. Trong d-heap mỗi nút có tối đa là d-1 nút con.
3. Big-O của thao tác insert heap là O(log k n)(2< k <d ) do đó, d-heap có hiệu quả hơn heap nhị phân
khi insert vào heap.
4. Với d khá lớn, thao tác Extract Heap trong d-heap tốn chi phí cao hơn heap nhị phân vì mỗi lần
tìm phần tử nhỏ nhất trong d nút con cần đến d−2 lần so sánh.
5. Thao tác nhân và chia để tìm chỉ số của nút cha hoặc nút con sẽ tốn chi phí ít hơn so với heap
nhị phân vì lúc này ta chia cho d thay vì chia cho 2 như trong heap nhị phân.
6. Nếu một ứng dụng thực hiện thao tác extract thường xuyên hơn thao tác insert thì d-heap nên
được chọn so với heap nhị phân.
Câu 12. Bạn có biết?
1. Bài viết khá đầy đủ về heap nhị phân các bạn có thể đọc tại ĐÂY1. (60 phút)
2. Heap nhị thức và ứng dụng trong các bài toán về đồ thị (chẳng hạn bài toán tìm đường đi ngắn
nhất giữa hai giao lộ trên một bản đồ). Bạn có thể đọc tại ĐÂY2. (60 phút)
3. Fibonacci heap và ứng dụng trong các bài toán về đồ thị (chẳng hạn bài toán tìm cây khung nhỏ
nhất, minimum spanning tree – MST, để ứng dụng trong lĩnh vực thiết kế vi mạch sao cho các
mạch tương đương nhau về điện thế nhưng độ dài đường dây nối mạch là ít nhất). Bạn có thể
đọc tại ĐÂY3. (60 phút)
1
https://en.wikipedia.org/wiki/Binary_heap
2
https://en.wikipedia.org/wiki/Binomial_heap
3
https://en.wikipedia.org/wiki/Fibonacci_heap
Câu 13. Bài tập về nhà: (50 phút)
1. Viết lại thuật toán “Reheap Up” để hỗ trợ thao tác insertHeap vào min-heap.
2. Viết lại thuật toán “Reheap Down” để hỗ trợ thao tác extract khỏi min-heap.
3. Viết lại thuật toán “Insert Heap,” để xây dựng min-heap.
4. Viết lại thuật toán “ExtractHeap” để xóa một nút gốc khỏi min-heap.
5. Viết thuật toán kết hợp hai heap thành một heap thứ ba.

You might also like