Về mặt lý thuyết có thể sắp xếp một mảng theo kiểu length(array) - length(longestIncreasingSubsequence(array))
di chuyển bằng cách chỉ di chuyển các phần tử chưa có thứ tự sắp xếp.Sắp xếp mảng theo số lần di chuyển tối thiểu
Nếu thao tác duy nhất được phép là di chuyển tại chỗ, bằng cách xóa phần tử khỏi chỉ mục A và chèn lại thành chỉ mục B, một phần tử tại một thời điểm, bạn sẽ tạo ra các bước chính xác để kết thúc với mảng được sắp xếp như thế nào? Một lần nữa, cần có yêu cầu di chuyển length(array) - length(longestIncreasingSubsequence(array))
.
Ví dụ, đây là một mảng:
[ 1, 8, 5, 2, 4, 6, 3, 9, 7, 10 ]
Các dãy con tăng dài nhất là:
[ 1, 2, 4, 6, 7, 10 ]
Các chỉ số của những yếu tố này là:
[ 0, 3, 4, 5, 8, 9 ]
Vì vậy, các chỉ số chúng tôi cần di chuyển là:
[ 1, 2, 6, 7]
vì đó là các chỉ mục chưa có thứ tự sắp xếp.
Để kết thúc với một mảng được sắp xếp, các chỉ số cuối cùng của những 4 yếu tố là:
[ 7, 4, 2, 8]
Vì vậy, chúng ta cần phải đồng thời di chuyển chỉ số từ 1 tới chỉ số 7, chỉ số 2 đến số 4, chỉ số 6 đến chỉ mục 2 và chỉ mục 7 đến chỉ mục 8. Vấn đề là khi một phần tử được di chuyển, các phần tử khác được dịch chuyển xung quanh làm cho các hoạt động di chuyển sau này không hợp lệ. Tôi đã thử chuyển đổi các chỉ mục này, nhưng cho đến nay vẫn chưa có danh sách đúng các bước di chuyển cần thiết. Bất kỳ ý tưởng?
Hy vọng rằng tôi đã giải thích được vấn đề đủ tốt. Vui lòng đặt câu hỏi và tôi sẽ làm rõ. Cảm ơn!
Làm thế nào bạn chuyển đổi các chỉ số '? Nếu sau khi hoán đổi '1 <> 7', bạn thay thế tất cả các tham chiếu chuyển tiếp sang' 7' bằng '1' và ngược lại,' 7 <> 8' sẽ trở thành '1 <> 8' và ba giá trị này sẽ nằm trong vị trí chính xác. –