You are on page 1of 2

Trường Đại học Khoa học Tự nhiên Cộng hòa xã hội chủ nghĩa Việt Nam

Khoa Công nghệ Thông tin Độc lập - Tự do - Hạnh phúc
ĐỀ THI THỰC HÀNH CUỐI KỲ
Môn thi: Cấu trúc dữ liệu & giải thuật
Lớp: CNTN08
Thời gian: 60 phút
(Sinh viên được sử dụng tài liệu, cài đặt bằng C/C++)
Mô tả:
Khuyết điểm của mảng một chiều là bộ nhớ để lưu trữ phải liên tục nên khi bộ nhớ bị phân mảnh thì
không thể lưu trữ được mảng lớn. Do đó, người ta cài đặt mảng một chiều bằng danh sách liên kết để
có thể tận dụng được toàn bộ vùng nhớ trống cũng như thực hiện việc thêm/xóa/sửa các phần tử
nhanh hơn bằng cách thay đổi các liên kết. Tuy nhiên, rắc rối nảy sinh khi tìm kiếm trên danh sách
liên kết do nếu tìm kiếm tuần tự sẽ lâu còn tìm kiếm nhị phân sẽ phức tạp. Vì vậy, để phục vụ tốt cho
việc tìm kiếm cũng như lưu trữ, người ta chuyển mảng một chiều thành cây nhị phân tìm kiếm.
Để việc tìm kiếm hiệu quả nhất, người ta cố gắng làm cho cây nhị phân tìm kiếm có chiều cao thấp
nhất có thể. Điều này đồng nghĩa với việc cây có chiều cao nhánh trái và nhánh phải xấp xỉ nhau
hay gọi là cây “cân bằng”. Để thực hiện điều này, người ta cân bằng lại cây bằng các thao tác “xoay
trái” hoặc “xoay phải” mỗi khi cây bị “lệch” do thao tác thêm/xóa các nút. Tuy nhiên, thao tác cân
bằng đòi hỏi chi phí cao nên người ta nghĩ ra giải thuật sau đây để xây dựng cây có độ cao thấp nhất:
Bước 1: Sắp xếp mảng một chiều 𝑎, gồm 𝑛 phần tử tăng dần.
1 2 3 4 5 6 7 8
Bước 2: Lấy phần tử giữa mảng 𝑎 𝑛/2 , gọi là 𝑥, làm gốc của cây.
1 2 3 4 5 6 7 8
Bước 3: Các phần tử bên trái 𝑥 trong mảng sẽ thuộc nhánh trái còn phần tử bên phải 𝑥 trong mảng sẽ
thuộc nhánh phải của cây gốc 𝑥.
5

1 2 3 4 6 7 8
Bước 4: Quay lại bước 2 để thực hiện cho 2 mảng trái và phải nếu số phần tử của mảng lớn hơn 1.
5 5

3 7 3 7

1 2 4 6 8 2 4 6 8

1

hãy tìm số nguyên tố lớn thứ 2 trong cây. 2.Yêu cầu: 1.CPP sử dụng trong chương trình.H và . chỉ còn tối đa 50% số điểm câu này nếu sử dụng mảng phụ và chỉ được tối đa 50% số điểm còn lại nếu duyệt cây (hoặc mảng) nhiều hơn 1 lần. Lưu ý. ~ Chúc các bạn làm bài tốt ~ .CPP (Ví dụ: 0812345. Chỉ được duyệt cây 1 lần. chỉ được tối đa 50% số điểm câu này nếu sử dụng các thao tác cân bằng cây. Nhập vào một mảng n số nguyên bất kỳ.  Đặt tên project là <MSSV> (Ví dụ : 0812345)  Đặt tên tập tin chứa hàm main là <MSSV>. Số nguyên tố 5 Số nguyên tố lớn thứ 2 lớn nhất 3 7 2 4 6 8 1 Lưu ý:  Các bài giống nhau đều được 0 điểm. Hãy xây dựng cây nhị phân tìm kiếm có chiều cao thấp nhất như giải thuật trên. Lưu ý.CPP) và đầu tập tin này chú thích các thông tin sau: /* Ho ten: MSSV: May so: */  Có thể nộp cả project hoặc chỉ cần nộp các tập tin .