Cách tiếp cận Median of medians
rất phổ biến trong quicksort
thuật toán phân vùng loại để tạo ra trục xoay khá tốt, sao cho nó phân chia mảng đồng nhất. Logic của nó được đưa ra trong Wikipedia là:Giải thích thuật toán Median of Medians
Trục được chọn nhỏ hơn và lớn hơn một nửa các phần tử trong danh sách trung vị, khoảng n/10 phần tử (1/2 * (n/5))) cho mỗi nửa. Mỗi phần tử trong số này là trung bình là 5, làm cho nó nhỏ hơn 2 phần tử khác và lớn hơn 2 phần tử khác bên ngoài khối. Do đó, trục xoay nhỏ hơn 3 (n/10) phần tử bên ngoài khối, và lớn hơn một phần tử 3 (n/10) khác bên ngoài khối. Do đó, trung vị được chọn chia các phần tử ở đâu đó giữa 30%/70% và 70%/30%, đảm bảo hành vi tuyến tính xấu nhất của thuật toán.
Ai đó có thể giải thích một chút sáng suốt cho tôi. Tôi thấy khó hiểu logic.
Chỉ cần một câu hỏi khác, làm thế nào đảm bảo phương pháp này rằng con số này sẽ là trung bình ? Trung bình là một số phân vùng mảng thành nửa trên và nửa dưới. Vậy con số 30-30-70 này có ý nghĩa gì? – SexyBeast
Vâng, trung bình là ở giữa, nhưng 'm' (trong văn bản ở trên) không phải là trung vị của tất cả các số. Nó là trung bình chỉ có 1/5 số (là trung bình của 5 nhóm phần tử nhỏ hơn). Hãy thử đọc đoạn cuối cùng với sự chú ý nhiều hơn. Cuối cùng, khi kết luận rằng 'm' lớn hơn ít nhất' 3n/10' của các con số, thì dịch sang 'm' lớn hơn ít nhất 30% số.Vì vậy, cuối cùng, nó giống như 'm' lớn hơn ít nhất 30% và nhỏ hơn ít nhất 30%. Có 40% còn lại mà chúng tôi không chắc chắn. – Shahbaz
Sau đó, làm thế nào nó mang lại một phân vùng 50-50 trung bình? Phân vùng 50-50 được đưa ra bởi trung bình bình thường, phải không? – SexyBeast