Saya ingin metode yang efisien untuk menghitung jumlah minimum transposisi yang diperlukan untuk mengurutkan daftar. Saya tidak perlu tahu apa sebenarnya transposisi itu.
Misalnya, daftar [1, 1, 2, 0] membutuhkan 2 transposisi:
[1, 1, 2, 0] // Start
[1, 1, 0, 2] // Swap index 2 and 3
[0, 1, 1, 2] // Swap index 0 and 2
Daftar [0, 1, 0, 0] membutuhkan 1 transposisi:
[0, 1, 0, 0] // Start
[0, 0, 0, 1] // Swap index 1 and 3
Daftar [2, 2, 2, 2] membutuhkan 0 transposisi karena sudah diurutkan.
Beberapa informasi meta: 1) Daftar ini mungkin memiliki elemen berulang, jadi cukup menggunakan jarak Cayley antara pengurutan dan permutasi identitas tidak akan berfungsi . 2) Pertanyaan Math Overflow ini terkait.
ds.algorithms
sorting
permutations
edit-distance
emchristiansen
sumber
sumber
Jawaban:
Sayangnya, masalahnya adalah NP-hard secara umum, menurut Amir, Hartman, Kapah, Levy dan Porat (lihat http://epubs.siam.org/doi/abs/10.1137/080712969 ), bahkan jika setiap simbol paling banyak muncul tiga kali.
Saya tidak menemukan penyebutan algoritma perkiraan faktor konstan, atau sesuatu yang cukup cepat untuk mengatasi masalah tersebut. Apakah ada batasan tambahan yang dapat Anda pikirkan dalam kasus Anda?EDIT: penulis juga memberikan algoritma perkiraan 3/2, tapi saya tidak tahu apakah itu cukup baik untuk tujuan Anda.
sumber