Kompleksitas Menghomogenisasi Tali


10

Motivasi : Ketika mengembangkan alat untuk versi data, kami akhirnya mencari ke dalam algoritma untuk "membedakan" dua set bilangan bulat, dengan menghasilkan serangkaian transformasi yang membawa satu set bilangan bulat ke yang lain. Kami dapat mengurangi masalah itu menjadi masalah sangat alami berikut yang tampaknya memiliki koneksi untuk mengedit jarak, pengelompokan dengan swapping , dan minimum partisi string umum .

Masalah : Kami diberi string, yaitu urutan huruf, dan tujuan kami adalah menyeragamkannya dengan biaya minimum. Artinya, kami ingin urutan yang disusun ulang sehingga semua huruf yang sama bersebelahan.

Satu-satunya operasi yang diizinkan adalah untuk mengambil urutan surat yang sama, dan memindahkan urutan itu di mana saja, dan yang saya biaya 1 unit.

Bantuan apa pun yang menggambarkan kompleksitas masalah ini akan sangat dihargai!

Contoh :

  • aabcdab: Input
  • bcd aa ab: Setelah memindahkan aa pertama ke posisi tepat setelah "d"
  • b bcdaaa: Setelah memindahkan trailing b ke posisi pertama

Karena string yang dihasilkan adalah homogen, kami memiliki biaya 2.

Perhatikan bahwa kami tidak dibatasi dengan cara apa pun sehubungan dengan output: selama itu homogen, kami tidak perlu memastikan urutan tertentu.

Jawaban:


6

Masalah ini selesai NP, dengan reduksi dari Minimum Hitting Set .

Dalam minimum memukul set, kita diberi semesta, , dan satu set set sehingga . Tujuannya adalah untuk menemukan dari ukuran terkecil sedemikian rupa sehingga sedemikian rupa sehingga .USsS,sUHUsS,hHhs

Pengurangannya adalah sebagai berikut:

  • String adalah sebagai berikut: Untuk setiap elemen , akan ada dua karakter dari string, . Di antara karakter-karakter ini akan ada karakter untuk setiap sehingga . Di antara pasangan , akan ada karakter unik yang tidak diulang dalam string.uUussSusu

  • Untuk menyeragamkan string, karakter harus dipindahkan kali, untuk setiap . Selain itu, untuk setiap , karakter harus dipindahkan satu kali, kecuali setiap antara pasangan telah dipindahkan ke tempat lain.s|s|1suusu

  • Oleh karena itu, untuk meminimalkan jumlah gerakan yang diperlukan untuk menyeragamkan string, kami ingin memaksimalkan jumlah sehingga setiap telah dipindahkan ke tempat lain. The s di mana s belum dipindahkan ke tempat lain harus bersama-sama mengandung untuk setiap , sehingga mereka harus untuk satu set memukul. Selain itu, setiap memukul set tersebut dapat berfungsi sebagai lokasi akhir dari s, dengan memindahkan setiap ke yang hits itu.ususssSssu

  • Jadi, jumlah gerakan untuk menghomogenkan string ini sama dengan, di mana adalah hitting set minimum.|s|+|H|H

Karena hitting set minimum adalah NP-Hard, string yang dihomogenisasi secara optimal juga. Karena bergerak membentuk saksi, itu NP-Lengkap.


Ini adalah pengurangan yang elegan - terima kasih!
Aditya Parameswaran

2

Lihatlah jumlah perubahan dari satu huruf ke huruf lainnya di string Anda, yang bisa Anda lihat sebagai ukuran untuk ketidakhomogenan string tersebut. Dengan setiap gerakan (berguna) dari urutan Anda mengurangi angka ini dengan satu jika gerakan berikutnya Anda didahului dan diikuti oleh dua huruf yang berbeda. Kalau tidak, Anda mengurangi ketidakhomogenan menjadi dua.

Jadi untuk string dengan perubahan k Anda membutuhkan paling banyak k - l + 1 bergerak di mana l adalah jumlah huruf yang berbeda dalam string, karena pada akhirnya l - 1 perubahan akan tetap. Karena sebuah string dengan panjang n dapat memiliki paling banyak n-1 perubahan huruf, ia dapat membutuhkan paling banyak n-l gerakan. Jumlah yang paling tidak mungkin adalah setengahnya.

Dengan demikian, strategi terbaik tampaknya adalah mencari bentuk abbba berikutnya dan memindahkan bbb dari sana. Ketika tidak ada yang tersisa, pindahkan apa pun. Anda masih bisa mencoba melakukan operasi yang menciptakan situasi abba baru, tapi saya pikir keuntungannya akan sangat sedikit. Karena strategi terburuk yang mungkin (tanpa gerakan konyol yang meningkatkan ketidakhomogenan) menggunakan paling banyak gerakan dua kali lebih banyak daripada yang optimal, sedikit yang mungkin Anda peroleh tampaknya tidak ada kaitannya dengan upaya seperti jawaban oleh isaacg dengan karakterisasi sebagai NP-hard menyarankan. Kecuali, tentu saja, Anda benar-benar hanya menghitung jumlah operasi pemindahan dan tidak peduli waktu untuk memutuskan gerakan mana yang akan diambil.

Karenanya, kasus terburuk adalah string di mana setiap huruf berbeda dari pendahulunya (dan Anda tidak mendapatkan bonus abba). Di sini Anda memerlukan sejumlah operasi linier dalam panjang string dan hampir sama dengan panjang ini.

Dalam contoh Anda, Anda memiliki 5 -> 4 -> 3 perubahan, dan 3 sama dengan jumlah huruf (4) minus 1.

Catatan: Untuk alfabet dengan ukuran hanya dua, setiap gerakan yang tidak memindahkan awalan atau akhiran dari string mengurangi inhomogenity oleh dua dan dengan demikian setiap urutan gerakan yang masuk akal adalah optimal.


Anda mengklaim bahwa langkah dapat mengurangi jumlah perubahan paling banyak 2, tetapi sebenarnya itu dapat mengurangi jumlah perubahan hingga 3. Misalnya, mengonversi "aabcabc" menjadi "aaabbcc" dengan memindahkan substring pertama "bc" ke bagian tengah dari substring kedua "bc" menghasilkan penurunan jumlah perubahan pada string dari 5 menjadi 2.
Mikhail Rudoy

Hai, @MikhailRudoy. Pertanyaan menyatakan bahwa operasi adalah "mengambil surat berikutnya yang sama", jadi bc tidak diperbolehkan sejauh yang saya mengerti.
Peter Leupold

Saya benar-benar melewatkan detail itu. Anda benar dalam hal itu.
Mikhail Rudoy

Peter benar: gerakan itu tidak diizinkan.
Aditya Parameswaran

Re: sisa dari jawaban - memang, pengamatan ini kembali: batas bawah, optimalitas huruf alfabet ukuran 2, dan heuristik untuk apa yang harus dilakukan pada titik mana pun berharga. Karena langkah apa pun dalam kasus terburuk hanya menguntungkan urutan huruf tersebut, dan dalam kasus terbaik menggabungkan paling banyak dua urutan huruf seperti di abbba Anda, perkiraan 2 tampaknya wajar.
Aditya Parameswaran
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.