Trn nhiu ng cn bng Multiway merge Ni
Trộn nhiều đường cân bằng (Multiway merge)
Nội dung phương pháp • Sử dụng N file (N=2 Nh), trong đó Nh file đóng vai trò file nguồn, Nh file đích. • Phân phối luân phiên các run tự nhiên từ file f 0 vào f 1, …. f. Nh • Thực hiện: – Vừa trộn vừa phân phối luân phiên – Sau mỗi quá trình trộn, ta đổi vai trò các file nguồn và file đích cho nhau. • Lặp lại quá trình trộn cho đến khi còn 1 Run
f 1 f. Nh+1 f. Nh f. N • f 0
Ví dụ: Sử dụng N=6 file F 0: 1, 9, 2, 16, 15, 3, 17, 12, 8, 4, Phân phối: F 1: 1, 9, 3, 17, 4. F 2: 2, 16, 12, F 3: 15, 8, Vừa trộn vừa phân phối: (F 1, F 2, F 3 F 4, F 5, F 6) F 4: 1, 2, 9, 15 16, F 5: 3, 8, 12, 17 F 6: 4
Ví dụ: Sử dụng N=6 file F 4: 1, 2, 9, 15 16, F 5: 3, 8, 12, 17 F 6: 4 Vừa trộn vừa phân phối: (F 4, F 5, F 6 F 1, F 2, F 3) F 1: 1 2 3 4 8 9 12 15 16 17
Quản lý file nguồn/đích • Sử dụng mảng t lưu chỉ số file. • Khởi đầu ti = i với i=1, . . . , N • Sau mỗi quá trình, ta hoán đổi hai nửa của t cho nhau. • Ta luôn có: f[t 1], f[t 2], . . , f[t. Nh] ---trộn f[t. Nh+1], . . . , F[t. N]
Quản lý file có run đang trộn, file còn dữ liệu. • File có run đang trộn file còn dữ liệu. • Sử dụng mảng ta, để lưu chỉ số file còn dữ liệu (k 1 file) với chỉ số các file có run đang trộn tập trung ở đầu (k 2 file).
Xử lý hết file (và cũng là hết run) • Giả sử file bị hết là f[ta[mx]] • Xử lý: – ta[mx] = ta[k 2] – ta[k 2] = ta[k 1] – k 2 = k 2 -1 – k 1 = k 1 -1
Xử lý hết run (không hết file) • Giả sử file có run bị hết là f[ta[mx]] – Hoán đổi ta[mx] và ta[k 2] – k 2 = k 2 -1
- Slides: 9