1 / 8

C III: Sắp xếp ngoại - tập tin (External sorting)

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

cato
Download Presentation

C III: Sắp xếp ngoại - tập tin (External sorting)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C III: Sắp xếp ngoại - tập tin(External sorting) Trộn nhị phân (Binary merge)

  2. 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

  3. 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ự

  4. 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

  5. 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.

  6. 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

  7. 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

  8. 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

More Related