Kata-kata yang memiliki produk asosiatif kanan dan kiri yang sama

9

Saya sudah mulai belajar automata non deterministik menggunakan buku Hopcroft dan Ullman . Saya terjebak dalam masalah yang menurut saya sangat menarik:

Berikan otomat terbatas hingga non deterministik yang menerima semua string yang memiliki nilai yang sama ketika dievaluasi dari kiri ke kanan sebagai kanan ke kiri dengan mengalikan menurut tabel berikut:

×abcaaacbcabcbca

Jadi jika kita memiliki string , produk dari kiri ke kanan adalah dan produk dari kanan ke kiri adalah( a × b ) × c = a × c = c a × ( b × c ) = a × b = aabc
(a×b)×c=a×c=c
a×(b×c)=a×b=a

Jadi tidak boleh diterima untuk automata. Bagi saya jelas bahwa string apa pun atau atau adalah string yang dapat diterima (evaluasi kanan dan kiri mereka bekerja pada string parsial yang sama). Sangat mudah untuk memberikan NFA yang menggambarkan evaluasi kiri ke kanan tetapi masalahnya adalah jika mesin mencoba menghitung evaluasi kanan ke kiri, saya pikir perlu mengetahui panjang tali (sehingga diperlukan memori tak terbatas).a a b b c c abcaabbcc

Jadi bagaimana automata non deterministik dapat mengevaluasi dari kanan ke kiri untuk membandingkan dengan evaluasi kiri ke kanan?

Pak Ariel
sumber

Jawaban:

6

Trik pertama di sini adalah menganggap tabel perkalian sebagai tabel transisi dari automaton dengan setiap negara bagian mewakili huruf dalam tabel perkalian Anda, tetapi belum mengkhawatirkan penerimaan. Jadi huruf-huruf di sebelah kiri dan di badan tabel sebenarnya menyatakan - akan lebih akurat untuk menuliskannya sebagai , tapi aku tidak mau. Huruf-huruf di atas adalah input.q a , q b , q cAqa,qb,qc

Kemudian buat otomat (" " untuk transpos) untuk perkalian terbalik dengan mentransposisi : T AATTA

ATabcaacbbaacccba

Jadi membawa Anda ke status , dan juga pindah ke keadaan dari , seperti yang Anda perhatikan.c A T ( c b a ) a A TA(abc)cAT(cba)aAT

Namun, mengasumsikan Anda akan kanan-ke-kiri, dan kami masih ingin ke kiri-ke-kanan. Jadi trik kedua adalah membalikkan otomat (bukan perkalian, yang hanya akan membuat kita kembali begitu kita mulai), dengan membalikkan semua panah, yang mengarah ke otomat non-deterministik diberikan oleh tabel transisi di bawah ini, dengan himpunan bagian ditunjukkan dengan huruf gabungan untuk menjaga ayam menggaruk, jadi benar-benar . (Kuharap aku baik-baik saja - sepertinya berhasil).A T R a c { a , c }ATATRac{a,c}

ATRabcaabbcbcaccabababbcacbccacabcacabcabbcabcabcabcabc

Anda dapat menafsirkan ini sebagai otomat non-deterministik dengan hanya tiga baris di atas garis atau versi yang ditentukan dengan semua 8 baris.

Akhirnya, mesin untuk menyelesaikan masalah adalah otomat lintas-produk dari dan , yaitu untuk melakukan perilaku persimpangan dua automata (kita tidak perlu apa pun lebih). memiliki status yang berpasangan seperti . Fungsi transisi menjalankan dan secara independen. Status awal tunggal masuk ke bawah input , ke bawah input , dll. A T R A × A T R A T A × A T Ra , a c A A T R1 , 1 sebuah , sebuah sebuah b , b bAATRA×ATRATA×ATRa,acAATR1,1a,aab,bb

Status penerima dalam versi non-deterministik adalah dll. Dalam versi deterministik, state penerima adalah pasangan di mana komponen pertama dari set komponen kedua, seperti atau .sebuah , sebuah b , b c a,aa,ab,bc

25 = 3 8 + 1 10 = 3 3 + 1A×ATR ditambah dan ditentukan seperti yang ditunjukkan memiliki menyatakan, jadi maafkan saya jika saya tidak menuliskannya secara rinci. Tetapi versi non-deterministik hanya memiliki status.25=38+110=33+1

David Lewis
sumber
Terima kasih, itu benar-benar membantu saya jawaban Anda untuk memahami ide di balik non determinisme dan "kebalikan" dari automata. Saya mengalami masalah memahami konsep-konsep ini menggunakan buku Hopcroft, sekarang saya menggunakan buku Sipser "Pengantar Teori Komputasi" benar-benar bagus.
Tn. Ariel
Pertimbangkan input . bergerak ke setelah input , dan kemudian ke bawah input , jadi tidak diterima, tetapi seharusnya? 1 , 1 b , b b c , a b aba1,1b,bbc,aba
Kuburkan
8

L L R L() Jika adalah bahasa biasa, maka , bahasa yang terdiri dari kebalikan dari semua kata dalam , juga teratur. Anggap ini sebagai latihan.LLRL

Bagaimana ini membantu kami memecahkan masalah? Biarkan menjadi bahasa yang terdiri dari semua string yang mengevaluasi ke ketika mengevaluasi dari kiri ke kanan. Bahasa yang Anda minati adalah Ini menunjukkan bahwa jika Anda tahu cara membuktikan , maka Anda dapat membuat NFA untuk bahasa yang dimaksud. a , b , c ( L aL R a ) ( L bL R b ) ( L cL R c c ) . ( )La,Lb,Lca,b,c

(LaLaR)(LbLbR)(LcLcR).
()

Bahkan, jika Anda menggunakan ide pembuktian , maka Anda mungkin bisa langsung saja membangun automaton. Jadi mari kita pertimbangkan ini. Secara khusus, mari kita coba membangun NFA untuk , bahasa semua string yang dievaluasi ketika dievaluasi dari kanan ke kiri.L R a a()LaRa

Idenya adalah ini. Misalkan huruf pertama yang Anda lihat adalah . Maka sisa string harus dievaluasi menjadi (karena menyiratkan ). Alasan yang sama berlaku ketika huruf pertama adalah . Namun, ketika huruf pertama adalah , sisanya dapat mengevaluasi ke atau , atau menjadi nol. Dengan NFA, kita bisa menebak (dan nanti memverifikasi tebakan kita).b b x = a x = b c a abbbx=ax=bcaab

Petunjuk ini harus memberi Anda cukup untuk dipikirkan, dan mudah-mudahan menyelesaikan masalah.

Yuval Filmus
sumber
Cara yang bagus untuk membuktikannya dengan formula - upvote untuk itu. Adapun ide "tebak-dan-verifikasi" non-deterministik alternatif, yang biasanya OK untuk bukti, tetapi cukup sulit untuk benar-benar melaksanakan, seperti permintaan masalah. Saya pikir ada banyak detail yang hilang di sini, seperti cara melacak string dari belakang.
David Lewis
@ David, detailnya sengaja hilang.
Yuval Filmus
@ Yuval - dia tidak mengatakan itu pekerjaan rumah - kami percaya orang di sini, benar? Saya juga berpikir bukti keberadaan ini akan menghasilkan mesin yang cukup besar, mungkin jauh lebih besar dari yang diperlukan.
David Lewis
@DavidLewis: Gilles memberikan jawaban yang lebih lengkap yang menunjukkan bahwa NFA memang tidak terlalu besar; nondeterminisme melakukan itu untukmu. DFA yang sesuai mungkin sangat besar.
Raphael
@MohamedAbbas Mungkin, saya tidak berencana untuk memeriksa.
Yuval Filmus
6

Imut.

Pertama, buat otomat yang menghitung produk dari kiri ke kanan. Mudah! Letakkan transisi setiap kali . Ada tiga status mewakili tiga produk yang mungkin. Mulai dalam keadaan keempat dengan untuk semua . Keadaan akhir adalah jika dan hanya jika produk dari kata input dari kiri ke kanan adalah .xyzxy=z{a,b,c}11xxxxx

Sekarang mari kita membangun otomat yang menghitung produk dari kanan ke kiri. Ini akan menjadi non-deterministik. Bagaimana kita melakukannya? Sederhana ... Untuk menuju ke arah lain, balikkan semuanya : panah dan arah produk.

Di mana kami sebelumnya sebelumnya , sekarang kita mengambil : ketika kita mengonsumsi kata dari kiri ke kanan, kita beralih dari suatu produk ke faktor sebelah kanannya. Atau, dengan kata lain, .xyxyxyxyxyyx

Tambahkan simpul terputus demi kata kosong. Semua node adalah inisial.1

Sekarang kita perlu menghitung kedua jalur secara bersamaan, jadi kita mengambil produk dari kedua automata: iff dan . Biarkan empat status menjadi awal, dan empat status menjadi final. Sebuah kata dikenali oleh robot non-deterministik ini jika produknya dari kiri ke kanan dan produknya dari kanan ke kiri adalah sama .(x1,x2)y(z1,z2)x1yz1x2yz2(1,x)(x,x)x

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Saya mengalami sedikit kesulitan dalam menangani ini. Tidakkah Anda harus memverifikasi bahwa mengarah ke set keadaan terbatas? IAC, ini tidak sesederhana "membalikkan segalanya", karena Anda masih harus mengkonsumsi dari kiri ke kanan, tetapi berkembang biak dari kanan ke kiri, dan saya tidak yakin Anda telah melakukannya. xyyx
David Lewis
@ DavidLewis Set keadaannya terbatas, saya mendefinisikannya sebagai . Saya telah membalik urutan perkalian (kecuali lebih banyak kesalahan ketik). {overleftarrowa,b,b,1}
Gilles 'SO- stop being evil'
5

Tampaknya masalah utama Anda adalah memanfaatkan nondeterminisme, jadi izinkan saya menjelaskannya.

Ide dasar yang digunakan orang lain adalah bahwa mesin nondeterministic dapat menebak hasil akhir.

Biarkan kami mempertimbangkan contoh kecil Anda dan ide konstruksi Gilles. Otomat "menghitung" produk kanan-ke-kiri menebak hasilnya di awal dan memverifikasinya . Jadi ada tiga kemungkinan:abc

  • Tebak : Sebagai symol pertama adalah , yang rl-produk pasti atau . a b c a baabcab
    • Tebak : Sebagai simbol kedua adalah , simbol terakhir pasti . b babb
      • (Tebak :) Ini , jadi jangan terima.cbc
    • Tebak : Karena simbol kedua adalah , simbol terakhir pasti . b cbbc
      • (Tebak :) Memang , jadi kami terima.ccc
  • Tebak : Sebagai symol pertama adalah , hal ini tidak mungkin, jadi tidak menerima.aba
  • Tebak : Karena symol pertama adalah , produk-rl dari pastia b c ccabcc
    • (Tebak :) Karena simbol kedua adalah , simbol terakhir pastilahb acba
      • (Tebak :) Ini , jadi jangan terima.cac

Seperti yang Anda lihat, NFA dapat menebak dan memeriksa setiap kemungkinan perhitungan dari bawah ke atas . Karena bahasa yang diterima didefinisikan sebagai set string yang diterima oleh setidaknya satu kali dijalankan , semua berjalan yang tidak menerima pada input diabaikan; NFA "selalu menebak dengan benar".

Sekarang mudah bagi NFA ini untuk mengingat pilihan pertamanya hingga akhir. Jika menerimanya, ia dapat membandingkan simbol yang diingat dengan produk-lr (secara deterministik) yang diperoleh secara paralel (bagaimana persimpangan bahasa berhubungan dengan NFA pasti tercakup dalam Ullman / Hopcroft, dan buku teks dasar lainnya).

Raphael
sumber
Gagasan untuk menebak string aneh bagi saya, tetapi saya telah membaca buku Sipser dan saya pikir itu adalah pendekatan yang lebih baik untuk pemula seperti saya dalam teori perhitungan.
Tn. Ariel
Anggap menebak sebagai forking dengan asumsi input. Tetapi perlu berhati-hati dengan strategi menebak - pastikan bahwa penyimpanan apa pun yang diperlukan untuk menebak dibatasi secara seragam untuk semua utas bercabang, jika tidak, Anda tidak memiliki otomat status terbatas lagi. Juga, perlu seragam terikat pada jumlah utas bercabang aktif. Saya pikir deskripsi Raphael di sini berfungsi, tetapi setidaknya perlu disebutkan.
David Lewis