Menemukan DFA terkecil yang memisahkan dua kata tanpa menggunakan pencarian brute force?

23

Diberikan dua string x dan y, saya ingin membangun DFA ukuran minimum yang menerima x dan menolak y. Salah satu cara untuk melakukan ini adalah pencarian brute force. Anda menghitung mulai DFA dengan yang terkecil. Anda mencoba setiap DFA sampai Anda menemukan satu yang menerima x dan menolak y.

Saya ingin tahu apakah ada cara lain yang diketahui untuk menemukan atau membangun DFA ukuran minimum yang menerima x dan menolak y. Dengan kata lain, dapatkah kita mengalahkan pencarian brute force?

Lebih detail:

(1) Saya benar-benar menginginkan sebuah algoritma untuk menemukan DFA ukuran minimum, bukan DFA ukuran minimum dekat.

(2) Saya tidak hanya ingin tahu seberapa besar atau kecil DFA minimumnya.

(3) Di sini, saya hanya fokus pada kasing seandainya Anda memiliki dua string x dan y.


Edit :

Informasi tambahan untuk pembaca yang tertarik:

Misalkan dan adalah string biner dengan panjang maksimal . Ini adalah hasil yang diketahui bahwa ada DFA yang menerima dan menolak dengan paling banyak menyatakan. Perhatikan bahwa ada sekitar DFA dengan alfabet biner dan paling banyak menyatakan. Oleh karena itu, pendekatan brute force tidak mengharuskan kita untuk menghitung lebih dari DFA. Oleh karena itu pendekatan brute force tidak bisa memakan waktu lebih dari waktu.y n x y xynxy nnnn nn nnnnn

Slide yang saya temukan bermanfaat: https://cs.uwaterloo.ca/~shallit/Talks/sep2.pdf

Michael Wehar
sumber
2
@ AndrásSalamon Apakah masih NP-complete jika set yang akan dibedakan masing-masing hanya terdiri dari satu string? Rasanya bagi saya seperti ini harus bisa ditelusuri secara wajar.
mhum
6
@membuat masalah bahwa ada banyak bahasa reguler yang berbeda yang memisahkan dua string - minimasi DFA akan menemukan otomat terbaik untuk salah satu dari bahasa ini tetapi tidak akan melakukan apa pun untuk membandingkannya dengan automata untuk bahasa lain yang terpisah.
David Eppstein
4
Jika dan adalah panjang yang berbeda, dengan yang lebih besar dari panjang n , mudah untuk dengan cepat menemukan DFA dengan status O ( log n ) yang memisahkannya: cukup gunakan siklus panjang p , di mana p tidak membagi | x | - | y | . Cari p dengan mencoba 2 , 3 , 5 , ... agar sampai Anda menemukan yang sesuai p . Jika x dan y memiliki panjang yang sama, maka OyxynO(logn)pp|x||y|p2,3,5,pxykonstruksi Robson, dalam kertas 1996, memberikan mesin sederhana yang dapat ditemukan dengan pencarian ukuranO(n). Konstruksi tidak dijamin menjadi DFA terkecil. O(n)O(n)
Jeffrey Shallit
3
Catatan Shallit, yang ditautkan di atas, termasuk pengamatan yang bermanfaat bahwa kasus terburuk untuk masalah pemisahan adalah ketika alfabetnya adalah biner: selalu mungkin untuk mempartisi huruf yang lebih besar menjadi dua himpunan bagian yang masih membedakan dua kata input dan mencari otomat biner yang memperlakukan huruf dalam satu himpunan bagian sebagai 0's dan huruf di himpunan bagian lainnya sebagai 1's. Tetapi untuk mencari otomat pemisah minimum ini tampaknya tidak membantu, karena Anda mungkin dapat menggunakan informasi tambahan dari alfabet asli untuk melakukan lebih baik daripada yang Anda bisa dengan pemetaan ke alfabet biner.
David Eppstein
3
kasus khusus dari pertanyaan terakhir lainnya ini di mana ukuran in-set dan out-set sama dengan 1. automata terbatas minimal yang diberikan kata-kata dan kata-kata keluar . jawaban itu mencantumkan beberapa literatur pembelajaran termasuk beberapa heuristik.
vzn

Jawaban:

9

Jika saya harus melakukan ini dalam praktek, saya akan menggunakan pemecah SAT.

Pertanyaan apakah ada DFA dengan menyatakan yang menerima x dan menolak y dapat dengan mudah dinyatakan sebagai instance SAT. Sebagai contoh, salah satu caranya adalah dengan memiliki 2 k 2 variabel boolean: z s , b , t benar jika DFA bertransisi dari state s ke state t pada bit input b . Kemudian tambahkan beberapa klausa untuk menegakkan bahwa ini adalah DFA, dan beberapa variabel dan klausa untuk menegakkan bahwa ia menerima x dan menolak y .kxy2k2zs,b,tstbxy

Sekarang gunakan pencarian biner pada untuk menemukan k terkecil sehingga DFA semacam ini ada. Berdasarkan apa yang saya baca di makalah tentang masalah terkait, saya berharap ini mungkin cukup efektif dalam praktik.kk


Pengkodean lain dari SAT ini dimungkinkan. Sebagai contoh, kita dapat menggunakan pengkodean jejak:

  • Jika adalah panjang m , Anda bisa menambahkan m lg k variabel boolean: let s 0 , s 1 , ... , s m menjadi urutan negara dilalui pada input x , dan mewakili masing-masing s i menggunakan lg k variabel boolean.xmmlgks0,s1,,smxsilgk

  • Sekarang untuk setiap sehingga x i = x j , Anda memiliki batasan bahwa s i - 1 = s j - 1i,jxi=xjsi1=sj1si=sj

  • yt0,,tnytjlgki,jyi=yjti1=tj1ti=tj

  • i,jxi=yjsi1=tj1si=tj

  • s0=t0s0=t0=0

  • k0si<k0tj<ki,j

  • xysmtn

Semua persyaratan ini dapat dikodekan sebagai klausa SAT.

kk

DW
sumber
3
perhatikan ini sebenarnya akan lebih unggul daripada pencarian brute force jika ada simetri tertentu dalam masalah dan mereka dikenali oleh solver, tetapi saat ini dapat sulit untuk mengidentifikasi / mengisolasi mereka (baik untuk manusia atau mesin). ada juga beberapa "teknologi" yang lebih baru / terkait dari teori modulo yang memuaskan dan pemrograman rangkaian jawaban yang beberapa di antaranya memiliki predikat grafik "bawaan" atau dapat mendukung definisi mereka.
vzn