Bài tập chương 5- Sắp xếp | Bài tập Cấu trúc dữ liệu và giải thuật | Trường Đại học Bách khoa Hà Nội

Giả sử bạn cần phân tích một văn bản để thống kê các từ và tần số xuất hiện của các từ này trong từ điển, sau đó đưa ra các từ (theo thứ tự ABC) và tần số. Hãy mô tả cấu trúc dữ liệu và thuật toán để bạn có thể thực hiện yêu cầu trên một cách hiệu quả nhấ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 tập chương 5. Sắp xếp
Bài 1. Viết hàm đ kim tra mt danh sách có theo th t tăng dn, hoc gim dn hay không?
Bài 2. Sa li phiên bn cài đt trên danh sách móc ni ca insertion_sort sao cho nó có th thc hin hiu
qu hơn nếu đu vào đã đưc sp xếp hoc gn như đưc sp xếp.
Bài 3. Cài đt Heap_Sort vi hai hàm siftUp và siftDown đã đưc xây dng trong slide
Bài 4. Xây dng hàm sp xếp các xâu ký t sao cho các xâu đưc to thành t cùng mt tp ký t nm lin
k nhau.
Ví d. “hellolohellà hai t cùng to thành t mt tp ký t
Bài 5. Cho mt mng các s nguyên đưc sp xếp theo th t tăng dn, thc hin xoay các phn t trong
mng vi s ln bt k.
Ví d. mng ban đu 1,2,3,4,5,6 xoay ln th nht ta đưc 2,3,4,5,6,1 xoay ln th 2 ta đưc 3,4,5,6,1,2
Xây dng mt thut toán vi thi gian c 𝑂(log 𝑛) để tìm ch s phn t th k trong mng đã xoay.
Ví d. vi mng đã xoay 3,4,5,6,1,2 thì ch s phn t th 2 5
Bài 6. Gi s bn có mt file 2GB cha các xâu ký t, mi xâu trên 1 dòng. Thut toán nào bn s dùng đ
sp xếp file này? Tại sao?
Bài 7. Cho mt dãy s bt k, xây dng hàm để tìm và tr v các cp s có s khác bit ln nht, nh nht
Bài 8. Xây dng hàm tìm và tr v phn t đưc lp li nhiu nht trong dãy s ban đu
Bài 9. Xây dng hàm đ tìm và tr v phn t ln nht th k trong dãy s ban đu
Bài 10. Đưa ra thut toán hiu qu để tìm giao ca hai tp hp trong các trưng hp sau
a. Tập nh hơn đã đưc sp th t
b. Tập ln hơn đã đưc sp th t
c. C hai tp đu đưc sp th t
Đánh giá hiu qu ca thut toán đ xut.
Bài 11. Chi hai tp s 𝑆
1
, và 𝑆
2
(mi tp đu có 𝑛 phn t)và mt s 𝑥. Hãy xây dng mt thut toán hiu
qu để tìm xem tn ti mt cp s (𝑎, 𝑏) trong đó 𝑎 thuc 𝑆
1
và b thuc 𝑆
2
sao cho 𝑎 + 𝑏 = 𝑥
Bài 12. Đưa ra cách gii quyết bài toán sau, và đánh giá hiu qu ca phương án mà bn đ xut:
a. Bn có hàng nghìn thông báo thu hc phí ca sinh viên và mt danh sách các bn ghi tin gửi t ATM
ti tài khon ca trưng đ đóng hc phí. Tìm và đưa ra danh sách nhng sinh viên chưa đóng hc phí
b. Bn có danh sách thông tin v các quyn sách trong thư vin gm: ISBN, tên tác gi, năm xut bn,
tiêu đ, nhà xut bn.. và mt danh sách các nhà xut bn. Tìm và đưa ra các sách đưc xut bn bi
mi nhà xut bn
c. Bn có thông tin mưn sách ca thư vin trong hc k va qua. Hãy tìm và đưa ra n nhng quyn
sách mà đưc mưn bi nhiu ngưi khác nhau.
d. Cũng cùng điu kin như câu hi c nhưng bn phi tìm và đưa ra danh sách nhng sinh viên mà đã
n ít nht mt quyn sách trong k va qua
Bài 13. Cho mt tp 𝑆 cha 𝑛 s nguyên, và mt giá tr nguyên 𝑚, hãy xây dng thut toán hiu qu để m
xem có tn ti 2 giá tr khác nhau trong 𝑆 sao cho tng hai s này đúng bng 𝑚 trong hai trưng hp:
a. Tập 𝑆 không đưc sp th t. Thut toán cn có thi gian thc hin c 𝑂(𝑛 log 𝑛)
b. Tập 𝑆 đưc sp th t. Thut toán cn thi gian thc hin c 𝑂(𝑛)
Bài 14. Cho mt danh sách cha 𝑛 phn t, tìm tt c các pahnaf t mà có tn s xut hin ln hơn 𝑛/2
trong danh sách. Thut toán ca bn cn có thi gian thc hin c 𝑂(𝑛)
Bài 15. Xây dng cu trúc stack đ có th push, pop và ly ra phn t nh nht vi thi gian là hng s
Bài 16. Xây dng hàm đ tìm và tr v phn t xut hin duy nht trong mt dãy 𝑛 s bt k.
Bài 17. So sánh ưu nhưc đim ca các phương pháp sp xếp. Phương pháp nào hiu qu cho cu trúc liên
kết, cho cu trúc liên tiếp?
Bài 18. Gi s bn cn phân tích mt văn bn đ thng kê các t tn s xut hin ca các t này trong t
đin, sau đó đưa ra các t (theo th t ABC) và tn s. Hãy mô t cu trúc d liu và thut toán đ bn
có th thc hin yêu cu trên mt cách hiu qu nht. Đánh giá thi gian thc hin ca mô hình bn đ
xut.
Bài 19. Hãy đ xut phương án đ gii quyết mt s vn đ vi sp xếp trong thc tế sau:
a. Sp xếp theo th t tăng dn hoc gim dn
b. Ch thc hin sp xếp vi khóa hay là vi toàn b bn ghi
c. X lý các khóa trùng nhau
d. Sp xếp trong trưng hp khóa không phi là s (xâu ký t hoc vector …)
Bài 20. Hàng đi ưu tiên (Priority Queue): khác vi hàng đi thông thưng, trong hàng đi ưu tiên mi phn
t li có thêm mt mc đ ưu tiên. Khi ly phn t - dequeue thì phn t có đ ưu tiên cao hơn s đưc
ly ra trưc. Hãy so sánh ưu nhưc đim ca vic cài đt Priority Queue trongc trưng hp sau:
a. Dùng mng chưa sp xếp
b. Dùng mng đã sp xếp
c. Cây nh phân tìm kiếm cân bng
d. Heap
Hãy cài đt các chc năng cơ bn ca ADT Priority Queue:
Insert: thêm mt phn t vào hàng đi
FindMax: tìm phn t đ ưu tiên ln nht
DeleteMax: loi b phn t có đ ưu tiên ln nht
Vi mt cu trúc d liu mà bn chn trên
| 1/2

Preview text:

Bài tập chương 5. Sắp xếp
Bài 1. Viết hàm để kiểm tra một danh sách có theo thứ tự tăng dần, hoặc giảm dần hay không?
Bài 2. Sửa lại phiên bản cài đặt trên danh sách móc nối của insertion_sort sao cho nó có thể thực hiện hiệu
quả hơn nếu đầu vào đã được sắp xếp hoặc gần như được sắp xếp.
Bài 3. Cài đặt Heap_Sort với hai hàm siftUp và siftDown đã được xây dựng trong slide
Bài 4. Xây dựng hàm sắp xếp các xâu ký tự sao cho các xâu được tạo thành từ cùng một tập ký tự nằm liền kề nhau.
Ví dụ. “hello” và “lohel” là hai từ cùng tạo thành từ một tập ký tự
Bài 5. Cho một mảng các số nguyên được sắp xếp theo thứ tự tăng dần, thực hiện xoay các phần tử trong
mảng với số lần bất kỳ.
Ví dụ. mảng ban đầu 1,2,3,4,5,6 xoay lần thứ nhất ta được 2,3,4,5,6,1 xoay lần thứ 2 ta được 3,4,5,6,1,2
Xây dựng một thuật toán với thời gian cỡ 𝑂(log 𝑛) để tìm chỉ số phần tử thứ k trong mảng đã xoay.
Ví dụ. với mảng đã xoay 3,4,5,6,1,2 thì chỉ số phần tử thứ 2 là 5
Bài 6. Giả sử bạn có một file 2GB chứa các xâu ký tự, mỗi xâu trên 1 dòng. Thuật toán nào bạn sẽ dùng để
sắp xếp file này? Tại sao?
Bài 7. Cho một dãy số bất kỳ, xây dựng hàm để tìm và trả về các cặp số có sự khác biệt lớn nhất, nhỏ nhất
Bài 8. Xây dựng hàm tìm và trả về phần tử được lặp lại nhiều nhất trong dãy số ban đầu
Bài 9. Xây dựng hàm để tìm và trả về phần tử lớn nhất thứ k trong dãy số ban đầu Bài 10.
Đưa ra thuật toán hiệu quả để tìm giao của hai tập hợp trong các trường hợp sau
a. Tập nhỏ hơn đã được sắp thứ tự
b. Tập lớn hơn đã được sắp thứ tự
c. Cả hai tập đều được sắp thứ tự
Đánh giá hiệu quả của thuật toán đề xuất.
Bài 11. Chi hai tập số 𝑆1, và 𝑆2 (mỗi tập đều có 𝑛 phần tử)và một số 𝑥. Hãy xây dựng một thuật toán hiệu
quả để tìm xem có tồn tại một cặp số (𝑎, 𝑏) trong đó 𝑎 thuộc 𝑆1 và b thuộc 𝑆2 sao cho 𝑎 + 𝑏 = 𝑥
Bài 12. Đưa ra cách giải quyết bài toán sau, và đánh giá hiệu quả của phương án mà bạn đề xuất:
a. Bạn có hàng nghìn thông báo thu học phí của sinh viên và một danh sách các bản ghi tiền gửi từ ATM
tới tài khoản của trường để đóng học phí. Tìm và đưa ra danh sách những sinh viên chưa đóng học phí
b. Bạn có danh sách thông tin về các quyển sách trong thư viện gồm: ISBN, tên tác giả, năm xuất bản,
tiêu đề, nhà xuất bản.. và một danh sách các nhà xuất bản. Tìm và đưa ra các sách được xuất bản bởi mỗi nhà xuất bản
c. Bạn có thông tin mượn sách của thư viện trong học kỳ vừa qua. Hãy tìm và đưa ra tên những quyển
sách mà được mượn bởi nhiều người khác nhau.
d. Cũng cùng điều kiện như câu hỏi c nhưng bạn phải tìm và đưa ra danh sách những sinh viên mà đã
mượn ít nhất mọt quyển sách trong kỳ vừa qua
Bài 13. Cho một tập 𝑆 chứa 𝑛 số nguyên, và một giá trị nguyên 𝑚, hãy xây dựng thuật toán hiệu quả để tìm
xem có tồn tại 2 giá trị khác nhau trong 𝑆 sao cho tổng hai số này đúng bằng 𝑚 trong hai trường hợp:
a. Tập 𝑆 không được sắp thứ tự. Thuật toán cần có thời gian thực hiện cỡ 𝑂(𝑛 log 𝑛)
b. Tập 𝑆 được sắp thứ tự. Thuật toán cần có thời gian thực hiện cỡ 𝑂(𝑛)
Bài 14. Cho một danh sách chứa 𝑛 phần tử, tìm tất cả các pahnaf tử mà có tần số xuất hiện lớn hơn 𝑛/2
trong danh sách. Thuật toán của bạn cần có thời gian thực hiện cỡ 𝑂(𝑛)
Bài 15. Xây dựng cấu trúc stack để có thể push, pop và lấy ra phần tử nhỏ nhất với thời gian là hằng số
Bài 16. Xây dựng hàm để tìm và trả về phần tử xuất hiện duy nhất trong một dãy 𝑛 số bất kỳ.
Bài 17. So sánh ưu nhược điểm của các phương pháp sắp xếp. Phương pháp nào hiệu quả cho cấu trúc liên
kết, cho cấu trúc liên tiếp?
Bài 18. Giả sử bạn cần phân tích một văn bản để thống kê các từ và tần số xuất hiện của các từ này trong từ
điển, sau đó đưa ra các từ (theo thứ tự ABC) và tần số. Hãy mô tả cấu trúc dữ liệu và thuật toán để bạn
có thể thực hiện yêu cầu trên một cách hiệu quả nhất. Đánh giá thời gian thực hiện của mô hình bạn đề xuất.
Bài 19. Hãy đề xuất phương án để giải quyết một số vấn đề với sắp xếp trong thực tế sau:
a. Sắp xếp theo thứ tự tăng dần hoặc giảm dần
b. Chỉ thực hiện sắp xếp với khóa hay là với toàn bộ bản ghi
c. Xử lý các khóa trùng nhau
d. Sắp xếp trong trường hợp khóa không phải là số (xâu ký tự hoặc vector …)
Bài 20. Hàng đợi ưu tiên (Priority Queue): khác với hàng đợi thông thường, trong hàng đợi ưu tiên mỗi phần
tử lại có thêm một mức độ ưu tiên. Khi lấy phần tử - dequeue thì phần tử có độ ưu tiên cao hơn sẽ được
lấy ra trước. Hãy so sánh ưu nhược điểm của việc cài đặt Priority Queue trong các trường hợp sau:
a. Dùng mảng chưa sắp xếp
b. Dùng mảng đã sắp xếp
c. Cây nhị phân tìm kiếm cân bằng d. Heap
Hãy cài đặt các chức năng cơ bản của ADT Priority Queue:
• Insert: thêm một phần tử vào hàng đợi
• FindMax: tìm phần tử có độ ưu tiên lớn nhất
• DeleteMax: loại bỏ phần tử có độ ưu tiên lớn nhất
Với một cấu trúc dữ liệu mà bạn chọn ở trên