Dari bacaan saya tampaknya sebagian besar tata bahasa berkaitan dengan menghasilkan string yang tak terbatas. Bagaimana jika Anda bekerja sebaliknya?
Jika diberi n string dengan panjang m, harus dimungkinkan untuk membuat tata bahasa yang akan menghasilkan string itu, dan hanya string itu.
Apakah ada metode yang dikenal untuk melakukan ini? Idealnya nama teknik yang bisa saya teliti. Atau, bagaimana saya bisa melakukan pencarian literatur untuk menemukan metode seperti itu?
formal-languages
regular-languages
formal-grammars
finite-sets
Gustav Bertram
sumber
sumber
Jawaban:
Ini termasuk dalam topik umum "induksi tata bahasa"; mencari frasa itu akan menghasilkan banyak literatur. Lihat, misalnya, Mendorong tata bahasa gratis konteks , https://en.wikipedia.org/wiki/Grammar_induction , https://cstheory.stackexchange.com/q/27347/5038 .
Untuk bahasa reguler (bukan yang bebas konteks), lihat juga Apakah regex golf NP-Complete? , DFA terkecil yang menerima string yang diberikan dan menolak string yang diberikan lainnya , Apakah ada peningkatan pada algoritma Dana Angluin untuk mempelajari set reguler , dan https://cstheory.stackexchange.com/q/1854/5038 .
sumber
sumber
Ada banyak cara, jadi Anda perlu memaksakan kriteria tambahan pada kualitas hasil.
sumber
Yang Anda tanyakan mirip dengan indeks pencarian. Memang Finite State Transducers dapat dibuat dan digunakan untuk mengenali teks yang diumpankan ke mereka. Sebagai contoh, Lucene menggunakan algoritma ini: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698
Untuk penggunaan praktis, lihat posting blog ini oleh Andrew Gallant: Indeks 1.600.000.000 Keys dengan Automata dan Rust
Dalam posting dia menjelaskan metode untuk membangun FSA diberikan kumpulan teks sehingga mengenali semua kata. Hasil akhirnya adalah untuk membangun FST sekitar minimal dari kunci pra-diurutkan dalam waktu linier dan dalam memori konstan.
Implementasinya tersedia di
fst
perpustakaannya: https://github.com/BurntSushi/fstsumber
Jawaban atas pertanyaan yang diajukan oleh reinierpost yang juga menjawab pertanyaan asli:
Kami membuat otomat kamus sebagai berikut:
Ukuran maksimal automaton adalah panjang total string input. Dengan asumsi bahwa Anda dapat mensimulasikan transisi dan membuat yang baru dalam waktu yang konstan, runtime juga merupakan panjang total dari string input. Tidak ada kasus terbaik atau terburuk.
Otomat ini minimal. karena dalam kasus biasa automata dan tata bahasa berhubungan hampir satu banding satu, hal yang sama berlaku untuk tata bahasa, Tentu saja, tidak mungkin untuk membangun sesuatu dengan ukuran n dalam waktu kurang dari n waktu.
sumber