Merge sort trực tiếp41... Merge sort trực tiếp Đánh giá thuật toán: - Chi phí thực hiện MergeSort là Onlgn - Nhược điểm: Không tận dụng được đặc tính của dãy cần sắp xếp.. Ví dụ: Trường
Trang 1Merge sort trực tiếp
41
Trang 2Merge sort trực tiếp
Đánh giá thuật toán:
- Chi phí thực hiện MergeSort là O(nlgn)
- Nhược điểm: Không tận dụng được đặc tính của
dãy cần sắp xếp Ví dụ: Trường hợp dãy đã có sẵn
thứ tự
- Thuật toán Merge sort cải tiến: Phương pháp
trộn tự nhiên (Natural Merge sort)
42
Trang 3Natural Merge sort
Khái niệm đường chạy (run): Một đường chạy
của dãy a là 1 dãy con không giảm của a Nghĩa
là, đường chạy r = (ai,ai+1,…,aj) phải thỏa điều kiện:
Ví du: Cho dãy a=[12,2,8,5,1,6,4,15] có 5 đường
chạy gồm (12),(2,8),(5),(1,6),(4,15)
Trang 4Natural Merge sort
Thuật toán:
- B1: r = 0; // r dùng để đếm số đường chạy
- B2: Tách dãy a=[a1,a2,…,an] thành 2 dãy b,c theo nguyên tắc luân phiên từng đường chạy
- B3: Trộn từng cặp đường chạy của 2 dãy b,c vào a
- B4: Nếu r<=2 thì trở lại bước 2 Ngược lại: Dừng
Trang 5Natural Merge sort
Ví dụ: Cho dãy a=[5,1,2,8,4,17,10,12,4,3,24,1,4]
B1:(5);(1,2,8);(4,17);(10,12);(4);(3,24);(1,4) r=7
B2:b=[(5);(4,17);(4);(1,4)]
c=[(1,2,8);(10,12);(3,24)]
B3:a=[1,2,5,8,4,10,12,17,3,4,24,1,4)
B2:b=[(1,2,5,8);(3,4,24)]
c=[(4,10,12,17);(1,4)]
B3:a=[1,2,4,5,8,10,12,17,1,3,4,4,24]
Trang 6Natural Merge sort
B3:a=[1,2,4,5,8,10,12,17,1,3,4,4,24]
B2: b=[(1,2,4,5,8,10,12,17)]
c=[(1,3,4,4,24)]
B3: a=[1,1,2,3,4,4,4,5,8,10,12,17,24]
(1,1,2,3,4,4,4,5,8,10,12,17,24) r=1 Dừng
Trang 7Natural Merge sort
Ưu và nhược điểm:
- Thuật toán trộn tự nhiên tận dụng được các đường chạy tự nhiên của dãy
- Tuy nhiên, trộn tự nhiên đòi hỏi không gian bộ nhớ
để lưu các dãy phụ b, c
- Thuật toán trộn tự nhiên thường ứng dụng trong
các cấu trúc dữ liệu là danh sách liên kết hoặc file
Trang 8Polyphase Merge sort
Trộn đa lối cân bằng:
Thay vì thực hiện 2 giai đoạn: Phân phối và trộn như Thuật toán Merge sort thông thường, trộn đa pha cân bằng chỉ cần thực hiện 1 giai đoạn trộn
- Tiết kiệm ½ chi phí
- Cần số lượng bộ nhớ trung gian gấp đôi
Trang 9Polyphase Merge sort
Ví dụ: a=[ 3,5 ,2,7,12, 8 ,4,15,20, 1,2,8,23 ,7,21,27] Dùng 6 mảng trung gian
B1: Phân phối các run luân phiên vào a1,a2,a3
a1: ( 3,5 );(4,15,20)
a2: ( 2,7,12 );(1,2,8,23)
a3: ( 8 );(7,21,27)
B2: Trộn các run của a1,a2,a3 và luân phiên phân
phối vào b1,b2,b3
Trang 10Polyphase Merge sort
b1: (2,3,5,7,8,12)
b2: (1,2,4,7,8,15,20,21,23,27)
b3: NULL
Run =2 Tiếp tục trộn b1,b2,b3 vào ngược lại a1,a2,a3
a1: 1,2,2,3,4,5,7,7,8,8,12,15,20,21,23,27
a2:NULL
a3: NULL
Run =1 Kết thúc