80 likes | 238 Views
C III: Sắp xếp ngoại - tập tin (External sorting). Trộn nhị phân (Binary merge). Trộn nhị phân (Binary merge). Run : Dãy con liên tiếp tăng trong 1 dãy VD: f0: 1, 5, 9, 2, 6, 18 , 12, 21 , Dựa vào run có chiều dài cố định p Ví dụ f0: 1, 5, 9, 2, 6, 18, 12 Phân phối với khởi đầu p=1
E N D
C III: Sắp xếp ngoại - tập tin(External sorting) Trộn nhị phân (Binary merge)
Trộn nhị phân (Binary merge) • Run : Dãy con liên tiếp tăng trong 1 dãy VD: f0: 1, 5, 9,2, 6, 18, 12, 21, • Dựa vào run có chiều dài cố định p • Ví dụ f0: 1, 5, 9, 2, 6, 18, 12 • Phân phối với khởi đầu p=1 f1: 1, 9, 6,12 f2: 5, 2, 18, • Trộn: f0: 1, 5, 2, 9, 6, 18, 12
Ví dụ • Phân phối với p=2 f1: 1, 5, 6, 18 f2: 2, 9, 12 • Trộn: f0: 1, 2, 5, 9, 6, 12, 18, • Phân phối với p=4 f1: 1, 2, 5, 9 f2: 6, 12, 18 • Trộn: f0: 1, 2, 5, 6, 9, 12, 18 • Ta được run có độ dài p=8 và file có thứ tự
Giải thuật • Giải thuật tổng quát: • Khởi tạo độ dài run p = 1 • Lặp lại quá trình sau: • Phân phối luân phiên các run có độ dài p từ f0 vào f1, f2 • Trộn các cặp run có độ dài p từ f1, f2 vào f0 • Tăng độ dài run p = 2*p • Cho đến khi p≥n // n là số phần tử của file
Phân phối • Mở file f0 để đọc; f1, f2 để ghi • Khởi gán: • n = i = 0 //đếm phần tử toàn cục và cục bộ • k = 1 //chỉ số file đích fk • Khi chưa eof(f0): • Đọc phần tử x từ f0 • Ghi x vào fk • Tăng n và i • Nếu i == p thì • k = (k==1? 2: 1) • i = 0 • Đóng f0, f1, f2.
Trộn • Sử dụng: • m – ghi nhận số phần tử cần trộn của file (=n) • q – Số phần tử của run đang trộn trong file f1 • r – Số phần tử của run đang trộn trong file f2 Giải thuật • Đọc x1 từ f1 và x2 từ f2 • Lặp • Lấy 1 run (q phần tử) trong f1 • Lấy 1 run (r phần tử) trong f2 • Trộn cặp run trong f1 và f2 ghi vào f0 • Cho đến khi m=0
Khi (q>0) Λ (r>0) Nếu x1<x2 Ghi x1 vào f0 Đọc x1 từ f1 q = q-1 Ngược lại Ghi x2 vào f0 Đọc x2 từ f2 r = r-1 Khi (q>0) Ghi x1 vào f0 Đọc x1 từ f1 q = q-1 Khi (r>0) Ghi x2 vào f0 Đọc x2 từ f2 r = r-1 Trộn 1 cặp run
Bài tập • Viết chương trình thực hiện • Nhập dữ liệu SV (MSSV, Hoten, Diem) lưu vào (cuối) tập tin • Tạo ra chỉ mục theo MSSV • In danh sách SV có thứ tự theo MSSV