Tôi muốn một phương pháp hiệu quả để tính toán số lượng chuyển vị tối thiểu cần thiết để sắp xếp danh sách. Tôi không cần biết chuyển vị thực sự là gì.
Ví dụ: danh sách [1, 1, 2, 0] yêu cầu 2 lần chuyển vị:
[1, 1, 2, 0] // Start
[1, 1, 0, 2] // Swap index 2 and 3
[0, 1, 1, 2] // Swap index 0 and 2
Danh sách [0, 1, 0, 0] yêu cầu 1 lần chuyển vị:
[0, 1, 0, 0] // Start
[0, 0, 0, 1] // Swap index 1 and 3
Danh sách [2, 2, 2, 2] yêu cầu 0 lần chuyển vị vì nó đã được sắp xếp.
Một số thông tin meta: 1) Danh sách có thể có các yếu tố lặp lại, vì vậy chỉ cần sử dụng khoảng cách Cayley giữa sắp xếp và hoán vị danh tính sẽ không hoạt động . 2) Câu hỏi toán học tràn này có liên quan.