Giáo trình Giải thuật - Đại học Cần Thơ
MỤC LỤC
. i PHẦN TỔNG QUAN
. 1 Chương 1: KĨTHUẬT PHÂN TÍCH GIẢI THUẬT
1.1 . 1 TỔNG QUAN
1.2 . 2 SỰCẦN THIẾT PHẢI PHÂN TÍCH GIẢI THUẬT
1.3 . 2 THỜI GIAN THỰC HIỆN CỦA GIẢI THUẬT
1.4 . 3 TỶSUẤT TĂNG VÀ ÐỘPHỨC TẠP CỦA GIẢI THUẬT
1.5 . 4 CÁCH TÍNH ÐỘPHỨC TẠP
1.6 . 7 PHÂN TÍCH CÁC CHƯƠNG TRÌNH ÐỆQUY
1.7 . 16 TỔNG KẾT CHƯƠNG 1
. 16 BÀI TẬP CHƯƠNG 1
. 18 Chương 2: SẮP XẾP
2.1 . 18 TỔNG QUAN
2.2 . 19 BÀI TOÁN SẮP XẾP
2.3 . 20 CÁC PHƯƠNG PHÁP SẮP XẾP ÐƠN GIẢN
2.4 . 25 QUICKSORT
2.5 . 31 HEAPSORT
2.6 . 39 BINSORT
2.7 . 44 TỔNG KẾT CHƯƠNG 2
. 44 BÀI TẬP CHƯƠNG 2
. 45 Chương 3: KĨTHUẬT THIẾT KẾGIẢI THUẬT
3.1 . 45 TỔNG QUAN
3.2 . 45 KĨTHUẬT CHIA ÐỂTRỊ
3.3 . 50 KĨTHUẬT “THAM ĂN”
3.4 . 56 QUY HOẠCH ÐỘNG
3.5 . 63 KĨTHUẬT QUAY LUI
3.6 . 78 KĨTHUẬT TÌM KIẾM ÐỊA PHƯƠNG
3.7 . 82 TỔNG KẾT CHƯƠNG 3
. 82 BÀI TẬP CHƯƠNG 3
. 85 Chương 4: CẤU TRÚC DỮLIỆU VÀ GIẢI THUẬT LƯU TRỮNGOÀI
4.1 . 85 TỔNG QUAN
4.2 . 85 MÔ HÌNH XỬLÝ NGOÀI
4.3 . 86 ÐÁNH GIÁ CÁC GIẢI THUẬT XỬLÝ NGOÀI
4.4 . 87 SẮP XẾP NGOÀI
4.5 . 93 LƯU TRỮTHÔNG TIN TRONG TẬP TIN
4.6 . 103 TỔNG KẾT CHƯƠNG 4
. 104 BÀI TẬP CHƯƠNG 4
c nhiều nhất b mẩu tin. Mỗi nút không phải là nút lá có dạng (p0,k1,p1,k2,p2,...,kn,pn), với pi (0 ≤ i ≤ n) là con trỏ, trỏ tới nút con thứ i của nút đó và ki là các giá trị khóa. Các khoá trong một nút được sắp thứ tự, tức là k1 < k2 < ... < kn. Tất cả các khoá trong cây con được trỏ bởi p0 đều nhỏ hơn k1. Tất cả các khoá nằm trong cây con được trỏ bởi pi (0 < i < n) đều lớn hơn hoặc bằng ki và nhỏ hơn ki+1. Tất cả các khoá nằm trong cây con được trỏ bởi pn đều lớn hơn hoặc bằng kn. Ví dụ 4-8: Cho tập tin bao gồm 20 mẩu tin với giá trị khóa là các số nguyên được tổ chức thành B-cây bậc 5 với các nút lá chứa được nhiều nhất 3 mẩu tin. GỐC 18 • • • P P1 2 10 12 • • 22 28 34 38 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 L L L L L L L L1 2 3 4 5 6 7 8 Hình 4-5: Tập tin B-cây bậc 5 4.5.5.3 Tìm kiếm Ðể tìm kiếm một mẩu tin r có khoá là x chúng ta sẽ lần từ nút gốc đến nút lá chứa r (nếu r tồn tại trong tập tin). Tại mỗi bước ta đưa nút trong (p0, k1, p1, ..., kn, pn) vào bộ nhớ trong và xác định mối quan hệ giữa x với các giá trị khóa ki. • Nếu ki ≤ x < k (0 < i < n) chúng ta sẽ xét tiếp nút được trỏ bởi pi+1 i, • Nếu x < k1 ta sẽ xét tiếp nút được trỏ bởi p0 và • Nếu x ≥ kn ta sẽ xét tiếp nút được trỏ bởi pn. Quá trình trên sẽ dẫn đến việc xét một nút lá. Trong nút lá này ta sẽ tìm mẩu tin r với khóa x bằng tìm kiếm tuần tự hoặc tìm kiếm nhị phân. 4.5.5.4 Thêm mẩu tin Ðể thêm một mẩu tin r có khoá là x vào trong B-cây, trước hết ta áp dụng thủ tục tìm kiếm nói trên để tìm r. Việc tìm kiếm này sẽ dẫn đến nút lá L. Nếu tìm thấy thì thông báo “Mẩu tin đã tồn tại”, ngược lại thì L là nút lá mà ta có thể xen r vào trong đó. Nếu khối L này còn đủ chỗ cho r thì ta thêm r vào sao cho đúng thứ tự của nó trong khối L và giải thuật kết thúc. Nếu L không còn chỗ cho r thì ta yêu cầu hệ thống cấp phát một khối mới L'. Dời ⎡b/2⎤ (b là số mẩu tin nhiều nhất có thể lưu Nguyễn Văn Linh Trang 99 Giải thuật CTDL và giải thuật lưu trữ ngoài trong một khối) mẩu tin nằm ở phân nửa cuối khối L sang L' rồi xen r vào L hoặc L' sao cho việc xen đảm bảo thứ tự các khoá trong khối. Giả sử nút P là cha của L (P phải được biết vì thủ tục tìm đi từ gốc đến L phải thông qua P). Bây giờ ta áp dụng thủ tục xen đệ quy để xen vào P một khóa k’ và con trỏ p’ tương ứng của nút lá L’ (k’ là khoá của mẩu tin đầu tiên trong L'). Trong trường hợp trước khi xen k' và p’, P đã có đủ m con thì ta phải cấp thêm một khối mới P’ và chuyển một số con của P sang P’ và xen con mới vào P hoặc P’ sao cho cả P và P’ đều có ít nhất ⎡m/2⎤ con. Việc chia cắt P này đòi hỏi phải xen một khóa và một con trỏ vào nút cha của P... Quá trình này có thể sẽ dẫn tới nút gốc và cũng có thể phải chia cắt nút gốc, trong trường hợp này phải tạo ra một nút gốc mới mà hai con của nó là hai nửa của nút gốc cũ. Khi đó chiều cao của B-cây sẽ tăng lên 1. Ví dụ 4-9: Thêm mẩu tin r có khoá 19 vào tập tin được biểu diễn bởi B-cây trong ví dụ 4-8 (hình 4-5) • Quá trình tìm kiếm sẽ xuất phát từ GỐC đi qua P2 và dẫn tới nút lá L4 • Trong nút lá L4 còn đủ chỗ để xen r vào đúng vị trí và giải thuật kết thúc. Kết quả việc xen ta được B-cây trong hình 4-6: GỐC 18 • • • P P1 2 10 12 • • 22 28 34 38 4 6 8 10 12 14 16 18 19 20 22 24 26 28 30 32 34 36 38 40 42 L L L L L L L L1 2 3 4 5 6 7 8 Hình 4-6: Xen thêm mẩu tin r có khoá 19 vào trong B-cây hình 4-5 Ví dụ 4-10: Thêm mẩu tin r có khoá 23 vào trong tập tin biêu diễn bởi B-cây trong ví dụ 4-8 (hình 4-5) • Quá trình tìm kiếm đi từ nút GỐC, qua P2 và tới nút lá L5. • Vì L5 đã đủ 3 mẩu tin nên phải tạo ra một nút lá mới L’5 và chuyển 2 mẩu tin có khóa 24, 26 sang L’5 sau đó xen r vào L5. • Giá trị khóa của mẩu tin đầu tiên trong L’5 là 24, ta phải xen 24 và con trỏ của L’5 vào P2, nhưng P2 đã có đủ 5 con, vậy cần tạo ra một nút mới P’2, chuyển các cặp khóa, con trỏ tương ứng với 34 và 38 sang P’2 và xen cặp con trỏ, khóa 24 vào P2. • Do có một nút mới P’2 nên phải xen vào cha của P2 (Ở đây là nút GỐC) một cặp khóa, con trỏ trỏ tới P’2. Con trỏ p0 của nút P’2 trỏ tới nút lá L6, Nguyễn Văn Linh Trang 100 Giải thuật CTDL và giải thuật lưu trữ ngoài giá trị khóa đầu tiên của L6 là 28. Giá trị này phải được xen vào nút GỐC cùng với con trỏ của P’2. GỐC 18 28 • • P1 P2 P’2 10 12 22 24 34 38 • • • • • • 4 6 8 10 12 14 16 18 20 22 23 24 26 28 30 32 34 36 38 40 42 L L L L L L’ L L L1 2 3 4 5 5 6 7 8 Hình 4-7: Xen thêm mẩu tin r có khoá 23 vào trong B-cây hình 4-5 4.5.5.5 Xóa một mẩu tin Ðể xóa mẩu tin r có khóa x, trước hết ta tìm mẩu tin r. Nếu không tìm thấy thì thông báo « Mẩu tin không tồn tại », ngược lại ta sẽ xác đinh được mẩu tin r nằm trong nút lá L và xóa r khỏi L. Nếu r là mẩu tin đầu tiên của L, thì ta phải quay lui lên nút P là cha của L để đặt lại giá trị khóa của L trong P, giá trị mới này bằng giá trị khóa của mẩu tin mới đầu tiên của L. Trong trường hợp L là con đầu tiên của P, thì khóa của L không nằm trong P mà nằm trong tổ tiên của P, chúng ta phải quay lui lên mà sửa đổi. Nếu sau khi xóa mẩu tin r mà L trở nên rỗng thì giải phóng L và quay lui lên nút P là cha của L để xoá cặp khoá-con trỏ của L trong P. Nếu số con của P bây giờ (sau khi xoá khoa-con trỏ của L) nhỏ hơn ⎡m/2⎤ thì kiểm tra nút P’ ngay bên trái hoặc bên phải và cùng mức với P. Nếu P’ có ít nhất ⎡m/2⎤+1 con, chúng ta chuyển một con của P’ sang P. Lúc này cả P và P’ có ít nhất ⎡m/2⎤. Sau đó ta phải cập nhật lại giá trị khóa của P hoặc P’ trong cha của chúng, và nếu cần chúng ta phải sửa cả trong tổ tiên của chúng. Nếu P’ có đúng ⎡m/2⎤ con, ta nối P và P’ thành một nút có đúng m con. Sau đó ta phải xóa khóa và con trỏ của P’ trong nút cha của P’. Việc xóa này có thể phải quay lui lên tổ tiên của P’. Kết quả của quá trình xóa đệ quy này có thể dẫn tới việc nối hai con của nút gốc, tạo nên một gốc mới và giải phóng nút gốc cũ, độ cao của cây khi đó sẽ giảm đi 1. Ví dụ 4-11: Xóa mẩu tin r có khóa 38 trong tập tin biểu diễn bởi B-cây kết quả của ví dụ 4-10 (hình 4-7). • Quá trình tìm kiếm, xuất phát từ nút GỐC, đi qua P’2 và đến nút lá L , 8 • Xóa mẩu tin r khỏi L8. • Mẩu tin đầu tiên của L8 bây giờ có khóa 40, Nguyễn Văn Linh Trang 101 Giải thuật CTDL và giải thuật lưu trữ ngoài • Sửa lại giá trị khóa của L8 trong P’2 (thay 38 bởi 40) ta được kết quả là B-cây sau: GỐC 18 28 • • P1 P2 P’2 10 12 22 24 34 40 • • • • • • 4 6 8 10 12 14 16 18 20 22 23 24 26 28 30 32 34 36 40 42 L1 L2 L3 L4 L5 L’5 L6 L7 L8 Hình 4-8: Xoá mẩu tin r có khoá 38 vào trong B-cây hình 4-7 Ví dụ 4-12 : Xoá mẩu tin r có khoá 10 trong tập tin biểu diễn bởi B-cây trong ví dụ 4-8 (hình 4-5). • Quá trình tìm kiếm, xuất phát từ nút GỐC, đi qua P1 và đến nút lá L2. • Xóa mẩu tin r khỏi L2. • L2 bây giờ trở nên rỗng, giải phóng L2. • Xóa giá trị khóa 10 và con trỏ của L2 trong P1, P1 bây giờ chỉ có 2 con (Thiếu con do 2 < ⎡5/2⎤). • Xét nút P2, bên phải và cùng cấp với P1, P2 có 5 con nên ta chuyển một con từ P2 sang P1. • Cập nhật lại khoá của P2 trong nút GỐC, ta được B-cây kết quả như sau: GỐC 22 • • • P1 P2 12 18 28 34 38 • • • 4 6 8 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 L L L L L L L1 3 4 5 6 7 8 Hình 4-9: Xoá mẩu tin có khoá 10 trong B-cây hình 4-5 Ví dụ 4-13: Xóa mẩu tin r có khóa 10 trong tập tin biểu diễn bởi B-cây kết quả của ví dụ 4-10 (hình 4-7). Nguyễn Văn Linh Trang 102 Giải thuật CTDL và giải thuật lưu trữ ngoài • Quá trình tìm kiếm, xuất phát từ nút GỐC, đi qua P1 và lần đến nút lá L2. • Xóa mẩu tin r khỏi L2. • L2 bây giờ trở nên rỗng, giải phóng L2. • Xóa giá trị khóa 10 và con trỏ của L2 trong P1, P1 bây giờ chỉ có 2 con (Thiếu con do 2 < ⎡5/2⎤). • Xét nút P2, bên phải và cùng cấp với P1, P2 có đúng ⎡5/2⎤ = 3 con nên ta nối P1 và P2 để P1 có đúng 5 con, giải phóng P2. • Xóa khóa và con trỏ của P2 trong nút GỐC, ta được B-cây kết quả như sau: GỐC 28 • • • P1 P2 12 18 22 24 34 38 • • 4 6 8 12 14 16 18 20 22 23 24 26 28 30 32 34 36 38 40 42 L L L L L’ L L L1 3 4 5 5 6 7 8 Hình 4-10: Xoá mẩu tin r có khoá 10 trong B-cây hình 4-7 4.6 TỔNG KẾT CHƯƠNG 4 Để đánh giá các giải thuật xử lí ngoài, cần phải xác định số phép truy xuất khối (đọc và ghi khối) mà giải thuật đó thực hiện. Theo đó, một giải thuật được xem là tốt nếu số lượng phép truy xuất khối nhỏ và để cái tiến giải thuật, ta cần tìm cách giảm số phép truy xuất khối. Các giải thuật sắp xếp trộn minh hoạ khá rõ ràng cho việc cải tiến giải thuật xử lí ngoài. Đối với việc tổ chức lưu trữ thông tin trong tập tin, chúng ta cần chú ý đến các loại tập tin bảng băm và tập tin B-cây, đây là hai loại tập tin rất hiệu quả. Nguyễn Văn Linh Trang 103 Giải thuật CTDL và giải thuật lưu trữ ngoài BÀI TẬP CHƯƠNG 4 Bài 1: Cho tập tin bao gồm các mẩu tin với giá trị khóa là các số nguyên được tổ chức thành B-cây bậc 5 với các nút lá chứa được nhiều nhất 3 mẩu tin như sau. GỐC 14 • • • P1 P2 8 12 19 27 35 • • 40 5 7 8 9 10 12 14 16 17 19 22 27 28 35 36 38 40 42 L1 L2 L3 L4 L5 L6 L7 L8 a) Xen mẩu tin R có giá trị khóa là 37 vào tập tin được biểu diễn bởi B-cây nói trên. b) Xóa mẩu tin R có giá trị khóa là 12 của tập tin được biểu diễn bởi B-cây nói trên. c) Xóa mẩu tin R có giá trị khóa là 12 của tập tin được biểu diễn bởi B-cây là kết quả của câu a). Bài 2: Giả sử ta dùng B-cây bậc 3 với các nút lá chứa được nhiều nhất 2 mẩu tin để tổ chức tập tin. Khởi đầu tập tin rỗng, hãy mô tả quá trình hình thành tập tin B-cây (bằng hình vẽ) khi thực hiện tuần tự các thao tác sau: 1. Xen mẩu tin R có khóa 8 2. Xen mẩu tin R có khóa 2 3. Xen mẩu tin R có khóa 10 4. Xen mẩu tin R có khóa 1 5. Xen mẩu tin R có khóa 12 6. Xen mẩu tin R có khóa 3 7. Xen mẩu tin R có khóa 5 8. Xóa mẩu tin R có khóa 8 9. Xóa mẩu tin R có khóa 1 Nguyễn Văn Linh Trang 104
File đính kèm:
- Giáo trình Giải thuật - Đại học Cần Thơ.pdf