Tìm kiếm hiệu quả số lượng chuyển vị tối thiểu cần thiết để sắp xếp danh sách


8

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.



1
Tôi nghĩ rằng (các) câu trả lời được đăng ở đây nên được hợp nhất với câu hỏi 4096.
Tsuyoshi Ito

1
@derekhh, đây không phải là một bản sao (hoặc ít nhất là cách giải thích của bài đăng là khác nhau trong câu hỏi khác). Tôi liên kết với câu hỏi 4096 trong bài viết gốc.
emchristiansen

3
Câu 4096 không nêu rõ các yếu tố đã cho là khác biệt. Thật không may, tất cả các câu trả lời được đăng ở đó đều âm thầm giả định điều này, và sự giám sát này có thể được sửa chữa bằng cách hợp nhất (các) câu trả lời ở đây vào đó.
Tsuyoshi Ito

1
@emchristiansen Rất tiếc, tôi đã không nhận thấy rằng ...
derekhh

Câu trả lời:


7

Thật không may, vấn đề là NP-hard nói chung, theo Amir, Hartman, Kapah, Levy và porat (xem http://epub.siam.org/doi/abs/10.1137/080712969 ), ngay cả khi mỗi biểu tượng xuất hiện nhiều nhất ba lần. Tôi đã không tìm thấy đề cập đến một thuật toán gần đúng yếu tố không đổi, hoặc một cái gì đó khá nhanh để giải quyết vấn đề. Có bất kỳ hạn chế bổ sung nào bạn có thể nghĩ đến trong trường hợp của bạn?

EDIT: các tác giả cũng đưa ra thuật toán xấp xỉ 3/2, nhưng tôi không biết liệu nó có đủ tốt cho mục đích của bạn không.


Cảm ơn đã tham khảo. Tôi đang xử lý các giá trị pixel, vì vậy danh sách các số nguyên trong [0, 255]. Độ dài danh sách phổ biến là 256 phần tử.
emchristiansen

Bạn có thể chứng minh rằng, khi bạn có một giải pháp (trình tự sắp xếp tối thiểu của chuyển vị), bạn luôn trao đổi số lớn ở bên trái với một số nhỏ hơn ở bên phải?
Ivan Kuckir
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.