Bài tập phần AVL, Splay, 2-3, Red-Black Tree - Cấu trúc dữ liệu và giải thuật | Trường Đại học Bách khoa Hà Nội

Các thao tác trên cần có thời gian thực hiện cỡ 𝑂(log 𝑛). Ở đây ta không phải thêm hay xóa các phần tử trong dãy, chỉ thực hiện cộng giá trị các phần tử. Có thể sử dụng thêm bộ nhớ phụ nếu cần, duyệt theo thứ tự giữa ta được biểu thức tiền tố. Tài liệu được sưu tầm, giúp bạn ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

Bài tp phn AVL, Splay, 2-3, Red-Black Tree
Bài 1. Trong các cây nh phân sau, cây nào là cây AVL, cây nào không phi. Vi các cây không phi là AVL, hãy
ch ra các đnh vi phm.
Bài 2. S nút ti thiu trên cây nh phân cân bng AVL có chiu cao h là bao nhiêu?
Bài 3. V cây AVL to thành bng cách thêm ln lưt các khóa sau (v cây sau mi ln 1 khóa đưc thêm
vào)
a. 3, 5, 7, 23, 12, 76, 87, 54, 19, 4
b. D, H, A, G, T, C, D, I, Q, V, B, E
c. 12, 34, 53, 76, 15, 21, 18, 45, 16, 55, 11
Bài 4. Vi các cây AVL kết qu trong bài 3, hãy v cây thu đưc sau khi ta xóa ln lưt các nút đã thêm vào
theo
a. Th t các nút đưc thêm vào trưc s b a trưc (FIFO)
b. Th t các nút đưc thêm vào sau s b xóa trưc (LIFO)
Bài 5. V cây thu đưc sau khi xóa các nút sau t y AVL i
a. J
b. F
c. P
d. L
e. S
f. R
Bài 6. Xây dng hàm đ tìm và tr v chiu cao trên cây AVL, bng cách đi t gc đến 1 nút lá thay vì đến tt
c nút lá
Gi ý: da vào thông tin v trng thái cân bng ca nút
Bài 7. Xây dng hàm đ tìm và tr v con tr ti nút bên trái nht ca cây con phi ca mt cây AVL khác
rng
Bài 8. Chng minh rng s ng các phép xoay khi thc hin xóa mt nút trên cây khôngt quá ½ chiu
cao ca cây
Bài 9. Viết hàm đ xóa mt nút trên cây AVL
Bài 10. Hoàn hin chương trình mô phng cây tìm kiếm nh phân cân bng AVL
Bài 11. Gi s chúng ta có mt dãy s liên tiếp
, . . ,
và chúng ta cn tr li nhanh cho câu hi dng: cho
, hãy tìm và tr v giá tr ln nht trong đon
, . . ,
Hãy xây dng cu trúc d liu đ lưu tr dãy vi chi phí
(
)
v b nh nhưng thi gian tìm và tr
li câu hi ch
(
1
)
Xây dng cu trúc mà ch cn chi phí b nh c (), và thi gian tìm và tr li cho câu hi là
(log )
Bài 12. Cho mng các s thc gm phn t [1, . . , ]. Hãy thiết kế thut toán đ thc hin các công vic
sau:
(, ) cng giá tr vào phn t th trong dãy
_() tr v tng ca phn t đầu tiên trong dãy

Các thao tác trên cn có thi gian thc hin c (log ). đây ta không phi thêm hay xóa các phn t
trong dãy, ch thc hin cng giá tr các phn t. Có th s dng thêm b nh ph nếu cn.
Bài 13. So sánh ưu nhưc đim ca các cu trúc cây AVL, Splay và cây 2-3.
Bài 14. V cây Splay thu đưc khi ta thc hin thêm ln lưt các khóa sau vào cây ban đu rng
a. 12, 45, 23, 76, 3, 47, 12, 15, 32
b. A, B, D, C, G, H, F, E
c. A, B, C, D, E, F, G, H, I, J
d. 15, 13, 12, 11, 9, 8, 7, 5, 1
Bài 15. Cho cây nh phân sau
Thc hin splay ti các trưng hp khóa sau: G, F, L, E
Bài 16. V cây 2-3 thu đưc khi ta thc hin thêm ln lưt các khóa sau vào cây ban đu rng
a. 12, 45, 23, 76, 3, 47, 12, 15, 32
b. A, B, D, C, G, H, F, E
c. A, B, C, D, E, F, G, H, I, J
d. 15, 13, 12, 11, 9, 8, 7, 5, 1
Bài 17. Cài đt hàm thc hin các phép xoay trên cây Splay trong trưng hp Zig-Zig và Zag-Zag
Bài 18. Viết hàm tìm kiếm trên cây Splay (sau khi tìm kiếm phi thc hin Splay)
Bài 19. Viết hàm thc hin xóa mt nút trên cây Splay
Bài 20. Viết hàm thc hin tìm kiếm trên cây 2-3
Bài 21. Viết hàm thc hin thêm mt nút trên cây 2-3
Bài 22. Viết hàm thc hin xóa nút trên cây 2-3
Bài 23. Gi s bn phi cài đt mt chương trình tra t trong t đin, bn đã có t đin khong 100,000 t
và ý nghĩa ca mi t. Bn s dùng cu trúc nào đ lưu tr các t để thc hin tìm kiếm nhanh nht (gi
s s không có thao tác thêm, xóa t trong t đin này). Các cu trúc bn có th chn là mng, cây AVL,
cây Splay và cây 2-3. Hãy gii thích la chn ca bn mt cách ngn gn.
Bài 24. Gi s bn có mt tp các văn bn mà bn ly đưc t web (chng hn tp các bài báo trên
vnexpress.net, hoc voanews.com). Bn phi tìm cách lưu tr các văn bn này sao cho khi ngưi dùng
nhp vào mt t bt k thì bn phi đưa ra đưc các văn bn cha t đó (sp xếp theo th t tn s
xut hin nhiu nht trưc). Hãy mô t cu trúc d liu ca bn dùng đ lưu tr và thut toán mà bn
dùng đ tìm kiếm trong 2 trưng hp:
a. S ng văn bn là c định (không có thêm và xóa các văn bn trong tp)
b. S ng văn bn có th biến đng (có s thêm và xóa các văn bn thưng xuyên)
Bài 25. Gi s bn cn qun lý thông in là mi quan h ca mi ngưi dùng (kiu như qun lý mi quan h
gia mi ngưi trong facebook), đ tìm ra mi quan h bn bè gia 2 ngưi
Ví d. Quan h bn bè gia tôi và bn Tùng là Tôi>Hùng>Duy>Thành>Tùng
Hãy mô t cu trúc d liu mà bn dùng đ thc hin thao tác này.
Bài 26. Gi s bn có file d liu v thông tin các thành viên ca mt mng xã hi khong 5GB, mà bn ch
có mt máy tính vi dung lưng b nh trong khong 500MB. Bn đang phi xây dng mt chương
trình tìm kiếm các thành viên theo s CMND (là s nguyên gm 9 ch s và phân bit cho mi thành
viên). Hãy mô t cu trúc d liu mà bn dùng đ lưu tr các thành viên trên sao cho vic tìm kiếm din
ra nhanh nht có th.
Chú ý: Trong trưng hp này bn không đ b nh trng đ np thông tin tt c các thành viên vào b
nh trong máy tính đ m kiếm. Bn ch th np tng phn vào b nh trong máy tính, và thi gian
np vào b nh trong là lâu.
Bài 27. Gi s bn có mt file đu vào cha khong 4 t s nguyên, hãy xây dng mt thut toán đ sinh ra
s nguyên mà không có trong file này. Vi gi s bn có 1GB b nh (10 MB b nh).
Bài 28. Gi s bn đang xây dng mt chương trình download t động các trang web trên mng crawler.
Bn thu đưc khong mt t các url, hãy mô t cách mà bn qun lý các url này sao cho chúng không
trùng nhau.
| 1/4

Preview text:

Bài tập phần AVL, Splay, 2-3, Red-Black Tree
Bài 1. Trong các cây nhị phân sau, cây nào là cây AVL, cây nào không phải. Với các cây không phải là AVL, hãy
chỉ ra các đỉnh vi phạm.
Bài 2. Số nút tối thiểu trên cây nhị phân cân bằng AVL có chiều cao h là bao nhiêu?
Bài 3. Vẽ cây AVL tạo thành bằng cách thêm lần lượt các khóa sau (vẽ cây sau mỗi lần 1 khóa được thêm vào)
a. 3, 5, 7, 23, 12, 76, 87, 54, 19, 4
b. D, H, A, G, T, C, D, I, Q, V, B, E
c. 12, 34, 53, 76, 15, 21, 18, 45, 16, 55, 11
Bài 4. Với các cây AVL kết quả trong bài 3, hãy vẽ cây thu được sau khi ta xóa lần lượt các nút đã thêm vào theo
a. Thứ tự các nút được thêm vào trước sẽ bị xóa trước (FIFO)
b. Thứ tự các nút được thêm vào sau sẽ bị xóa trước (LIFO)
Bài 5. Vẽ cây thu được sau khi xóa các nút sau từ cây AVL ở dưới a. J d. L b. F e. S c. P f. R
Bài 6. Xây dựng hàm để tìm và trả về chiều cao trên cây AVL, bằng cách đi từ gốc đến 1 nút lá thay vì đến tất cả nút lá
Gợi ý: dựa vào thông tin về trạng thái cân bằng của nút
Bài 7. Xây dựng hàm để tìm và trả về con trỏ tới nút bên trái nhất của cây con phải của một cây AVL khác rỗng
Bài 8. Chứng minh rằng số lượng các phép xoay khi thực hiện xóa một nút trên cây không vượt quá ½ chiều cao của cây
Bài 9. Viết hàm để xóa một nút trên cây AVL
Bài 10. Hoàn hiện chương trình mô phỏng cây tìm kiếm nhị phân cân bằng AVL
Bài 11. Giả sử chúng ta có một dãy số liên tiếp 𝑎1, . . , 𝑎𝑛 và chúng ta cần trả lời nhanh cho câu hỏi dạng: cho
𝑖, 𝑗 hãy tìm và trả về giá trị lớn nhất trong đoạn 𝑎𝑖, . . , 𝑎𝑗
• Hãy xây dựng cấu trúc dữ liệu để lưu trữ dãy với chi phí 𝑂(𝑛2) về bộ nhớ nhưng thời gian tìm và trả
lời câu hỏi chỉ là 𝑂(1)
• Xây dựng cấu trúc mà chỉ cần chi phí bộ nhớ cỡ 𝑂(𝑛), và thời gian tìm và trả lời cho câu hỏi là 𝑂(log 𝑛)
Bài 12. Cho mảng các số thực gồm 𝑛 phần tử 𝐴[1, . . , 𝑛]. Hãy thiết kế thuật toán để thực hiện các công việc sau:
• 𝐴𝑑𝑑(𝑖, 𝑦) cộng giá trị 𝑦 vào phần tử thứ 𝑖 trong dãy
• 𝑃𝑎𝑟𝑡𝑖𝑎𝑙_𝑠𝑢𝑚(𝑖) trả về tổng của 𝑖 phần tử đầu tiên trong dãy ∑𝑗 𝑎 𝑗=1 𝑗
Các thao tác trên cần có thời gian thực hiện cỡ 𝑂(log 𝑛). Ở đây ta không phải thêm hay xóa các phần tử
trong dãy, chỉ thực hiện cộng giá trị các phần tử. Có thể sử dụng thêm bộ nhớ phụ nếu cần.
Bài 13. So sánh ưu nhược điểm của các cấu trúc cây AVL, Splay và cây 2-3.
Bài 14. Vẽ cây Splay thu được khi ta thực hiện thêm lần lượt các khóa sau vào cây ban đầu rỗng
a. 12, 45, 23, 76, 3, 47, 12, 15, 32 b. A, B, D, C, G, H, F, E
c. A, B, C, D, E, F, G, H, I, J
d. 15, 13, 12, 11, 9, 8, 7, 5, 1
Bài 15. Cho cây nhị phân sau
Thực hiện splay tại các trường hợp khóa sau: G, F, L, E
Bài 16. Vẽ cây 2-3 thu được khi ta thực hiện thêm lần lượt các khóa sau vào cây ban đầu rỗng
a. 12, 45, 23, 76, 3, 47, 12, 15, 32 b. A, B, D, C, G, H, F, E
c. A, B, C, D, E, F, G, H, I, J
d. 15, 13, 12, 11, 9, 8, 7, 5, 1
Bài 17. Cài đặt hàm thực hiện các phép xoay trên cây Splay trong trường hợp Zig-Zig và Zag-Zag
Bài 18. Viết hàm tìm kiếm trên cây Splay (sau khi tìm kiếm phải thực hiện Splay)
Bài 19. Viết hàm thực hiện xóa một nút trên cây Splay
Bài 20. Viết hàm thực hiện tìm kiếm trên cây 2-3
Bài 21. Viết hàm thực hiện thêm một nút trên cây 2-3
Bài 22. Viết hàm thực hiện xóa nút trên cây 2-3
Bài 23. Giả sử bạn phải cài đặt một chương trình tra từ trong từ điển, bạn đã có từ điển khoảng 100,000 từ
và ý nghĩa của mỗi từ. Bạn sẽ dùng cấu trúc nào để lưu trữ các từ để thực hiện tìm kiếm nhanh nhất (giả
sử sẽ không có thao tác thêm, xóa từ trong từ điển này). Các cấu trúc bạn có thể chọn là mảng, cây AVL,
cây Splay và cây 2-3. Hãy giải thích lựa chọn của bạn một cách ngắn gọn.
Bài 24. Giả sử bạn có một tập các văn bản mà bạn lấy được từ web (chẳng hạn tập các bài báo trên
vnexpress.net, hoặc voanews.com). Bạn phải tìm cách lưu trữ các văn bản này sao cho khi người dùng
nhập vào một từ bất kỳ thì bạn phải đưa ra được các văn bản chứa từ đó (sắp xếp theo thứ tự tần số
xuất hiện nhiều nhất trước). Hãy mô tả cấu trúc dữ liệu của bạn dùng để lưu trữ và thuật toán mà bạn
dùng để tìm kiếm trong 2 trường hợp:
a. Số lượng văn bản là cố định (không có thêm và xóa các văn bản trong tập)
b. Số lượng văn bản có thể biến động (có sự thêm và xóa các văn bản thường xuyên)
Bài 25. Giả sử bạn cần quản lý thông in là mối quan hệ của mỗi người dùng (kiểu như quản lý mỗi quan hệ
giữa mọi người trong facebook), để tìm ra mối quan hệ bạn bè giữa 2 người
Ví dụ. Quan hệ bạn bè giữa tôi và bạn Tùng là Tôi>Hùng>Duy>Thành>Tùng
Hãy mô tả cấu trúc dữ liệu mà bạn dùng để thực hiện thao tác này.
Bài 26. Giả sử bạn có file dữ liệu về thông tin các thành viên của một mạng xã hội khoảng 5GB, mà bạn chỉ
có một máy tính với dung lượng bộ nhớ trong khoảng 500MB. Bạn đang phải xây dựng một chương
trình tìm kiếm các thành viên theo số CMND (là số nguyên gồm 9 chữ số và phân biệt cho mỗi thành
viên). Hãy mô tả cấu trúc dữ liệu mà bạn dùng để lưu trữ các thành viên trên sao cho việc tìm kiếm diễn ra nhanh nhất có thể.
Chú ý: Trong trường hợp này bạn không đủ bộ nhớ trống để nạp thông tin tất cả các thành viên vào bộ
nhớ trong máy tính để tìm kiếm. Bạn chỉ có thể nạp từng phần vào bộ nhớ trong máy tính, và thời gian
nạp vào bộ nhớ trong là lâu.
Bài 27. Giả sử bạn có một file đầu vào chứa khoảng 4 tỷ số nguyên, hãy xây dựng một thuật toán để sinh ra
số nguyên mà không có trong file này. Với giả sử bạn có 1GB bộ nhớ (10 MB bộ nhớ).
Bài 28. Giả sử bạn đang xây dựng một chương trình download tự động các trang web trên mạng – crawler.
Bạn thu được khoảng một tỷ các url, hãy mô tả cách mà bạn quản lý các url này sao cho chúng không trùng nhau.