Sắp xếp giải đấu
Trang này giới thiệu ngắn gọn về thuật toán sắp xếp kiểu "đấu loại" (Tournament sort).
Định nghĩa
Sắp xếp theo hình thức đấu loại (Tournament sort), còn gọi là sắp xếp chọn theo cây, là phiên bản tối ưu của sắp xếp chọn và là một biến thể của heap sort (đều dùng cây nhị phân hoàn chỉnh). Ý tưởng là dùng cấu trúc giống hàng đợi ưu tiên để chọn phần tử tiếp theo cần lấy.
Nguồn gốc tên
Tên "tournament" xuất phát từ hình thức thi đấu loại trực tiếp. Nhiều tuyển thủ so tài từng cặp, kẻ thắng tiến vòng kế tiếp. Cách loại trực tiếp xác định người thắng nhưng người bị loại cuối cùng không nhất thiết là nhì — vì có thể thua người sau đã bị loại trước đó.
Quá trình
Lấy ví dụ "cây đấu loại chọn nhỏ nhất":

Các phần tử cần sắp xếp được đặt ở các lá. Các cạnh màu đỏ biểu diễn đường thắng của phần tử nhỏ hơn trong mỗi so sánh. Rõ ràng một lượt "đấu" chọn ra phần tử nhỏ nhất của một tập.
Mỗi lượt so sánh trên n phần tử tạo ra n/2 "người thắng" để vào vòng sau; với mỗi cặp, phần tử nhỏ hơn tiến. Nếu có phần tử lẻ không có cặp, nó tự động tiến vòng sau.

Sau khi chọn được phần tử nhỏ nhất, ta loại bỏ nó (thường gán giá trị đó là +∞ — ý tương tự như trong heap sort) và tổ chức lại "đấu" để chọn phần tử nhỏ thứ hai. Lặp lại đến khi các phần tử đều được lấy ra theo thứ tự tăng dần.
Tính chất
Tính ổn định
Tournament sort không phải là thuật toán ổn định.
Độ phức tạp thời gian
Độ phức tạp tốt nhất, trung bình và xấu nhất đều là \(O(n\log n)\). Thuật toán khởi tạo "tournament" trong \(O(n)\), sau đó mỗi lần chọn một phần tử tốn \(O(\log n)\).
Độ phức tạp không gian
Sử dụng \(O(n)\) bộ nhớ phụ.
Triển khai
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | |
Liên kết ngoài
Last updated on this page:, Update history
Found an error? Want to help improve? Edit this page on GitHub!
Contributors to this page:OI-wiki
All content on this page is provided under the terms of the CC BY-SA 4.0 and SATA license, additional terms may apply