Bahasa biasa dan mesin keadaan terhingga. Pembinaan NFA menggunakan tatabahasa linear kanan


tetapan

Menurut teorem Kleene, sebarang ungkapan biasa anda boleh mengaitkan mesin terhingga, yang merupakan model formal algoritma untuk mengenali leksem yang dilambangkan dengan ungkapan biasa yang diberikan. Dalam istilah yang paling umum, mesin keadaan-pengecam ditentukan oleh set terhingga keadaan ciri aliran input dan peralihan antara mereka. Perubahan keadaan berlaku apabila simbol aliran input diterima daripada abjad tertentu mengikut fungsi peralihan, yang menentukan kemungkinan keadaan berikutnya berdasarkan simbol input dan keadaan semasa. Di antara keadaan yang mungkin, yang awal menonjol(awal) dan muktamad(membenarkan) menyatakan di mana pengecam automaton terhingga boleh, masing-masing, pada permulaan dan penyelesaian token pemprosesan aliran input. Jika urutan input simbol boleh menjana urutan peralihan yang boleh memindahkan mesin keadaan terhingga dari keadaan awal kepada salah satu keadaan akhir, maka ia dianggap mengakui dan tergolong dalam set biasa yang diiktiraf olehnya.


(00|11)*((01|10)(00|11)*(01|10)(00|11)*)*

Jadual 1

0 1
S1S4S2
S2S3S1
S3S2S4
S4S1S3

Lajur jadual peralihan menunjukkan aksara abjad input dan baris sepadan dengan keadaan semasa DFA. Elemen setiap baris menunjukkan keadaan DFA, yang mana ia mesti beralih daripada keadaan semasa apabila menerima aksara yang sepadan dengan abjad input. Khususnya, daripada baris pertama jadual peralihan ini, ia mengikuti bahawa menerima simbol 0 dan 1 dalam keadaan awal Q1 menterjemahkan DFA kepada menyatakan Q4 dan Q2, masing-masing.

Apabila mengenali jujukan input menggunakan jadual peralihan, adalah mudah untuk mengesan perubahan dalam keadaan DFA untuk menentukan sama ada satu daripada negeri yang dibenarkan tercapai atau tidak. Khususnya, untuk vektor binari 01001000 dengan nombor genap sifar dan satu, DFA yang dianggap menjana urutan peralihan berikut, di mana setiap peralihan dilabelkan dengan simbol abjad input yang menyebabkannya:


S1 0 S4 1 S3 0 S2 0 S3 1 S4 1 S1 0 S4 0 S1


Urutan peralihan ini berakhir dengan keadaan penerimaan Q1, oleh itu, vektor binari 01001000 tergolong dalam set biasa yang diiktiraf oleh DFA yang dipertimbangkan dan memenuhi ungkapan biasa di atas.

Kesimpulannya, perlu diingatkan bahawa kaedah pembinaan yang dianggap tidak formal

dengan jumlah bilangan aksara abjad simbol dan tanda operasi dan kurungan dalam entri r.

Asas. Automata untuk ungkapan panjang 1: dan ditunjukkan dalam rajah berikut.


nasi. 5.1.

Ambil perhatian bahawa bagi setiap tiga automata ini, set keadaan akhir terdiri daripada satu keadaan.

Langkah induksi. Sekarang andaikan bahawa untuk setiap ungkapan biasa panjang = 1, perkataan w boleh dibahagikan kepada k subkata: w=w 1 w 2 ... w k dan itu sahaja. Bagi setiap i= 1,... ,k perkataan w i menterjemah q 0 1 kepada q f 1 . Kemudian untuk perkataan w dalam rajah M terdapat laluan

Oleh itu, . Sebaliknya, jika sesetengah perkataan menterjemah q 0 menjadi q f , maka sama ada ia wujud atau ia dibawa oleh laluan yang, setelah berlalu dari q 0 ke q 0 1 dan kemudian melalui beberapa kali di sepanjang laluan dari q 0 1 ke q f 1 dan kembali daripada q f 1 kepada q 0 1 dengan -peralihan, akhirnya daripada q f 1 dengan -peralihan berakhir dengan q f . Oleh itu perkataan sedemikian.

Daripada Teorem 4.2 dan 5.1 kita perolehi secara langsung

Akibat 5.1. Untuk setiap ungkapan biasa, seseorang boleh membina mesin keadaan terhingga deterministik dengan berkesan yang mengenali bahasa yang diwakili oleh ungkapan itu.

Pernyataan ini adalah salah satu contoh teorem sintesis: berdasarkan penerangan tugas (bahasa sebagai ungkapan biasa), program (DFA) yang melaksanakannya dibina dengan berkesan. Sebaliknya juga benar - teorem analisis.

Teorem 5.2.

Untuk setiap mesin keadaan terhingga deterministik (atau bukan deterministik), adalah mungkin untuk membina ungkapan biasa yang mewakili bahasa yang diiktiraf oleh mesin tersebut.

Bukti teorem ini agak teknikal dan di luar skop kursus kami.

Oleh itu, kita boleh membuat kesimpulan bahawa kelas bahasa automata terhingga bertepatan dengan kelas bahasa biasa. Mulai sekarang kita hanya akan memanggilnya kelas bahasa automata.


Automatik M r, yang dibina dalam bukti Teorem 5.1


Untuk kajian lanjut tentang sifat automata terhingga dan, khususnya, untuk menyelesaikan masalah sintesis, teorem berikut adalah penting.


Untuk membuktikan teorem, adalah perlu, pertama sekali, untuk menerangkan algoritma untuk membina automaton terhingga deterministik daripada yang asal; kedua, untuk mewajarkan algoritma ini dengan membuktikan dengan teliti bahawa ia memang menghasilkan mesin keadaan yang deterministik dan setara dengan yang asal. Di sini kami hanya membentangkan algoritma untuk membina automaton deterministik.


Transformasi automaton terhingga sewenang-wenangnya kepada deterministik yang setara dijalankan dalam dua peringkat: pertama, arka dengan label \lambda dibuang, kemudian penentuan itu sendiri dijalankan.


1. Mengalih keluar λ-transitions (arka berlabel \lambda).


Untuk beralih daripada automasi terhingga asal M=(V,Q,q_0,F,\delta) kepada automatik terhingga yang setara M"=(V,Q",q_0,F",\delta") tanpa peralihan-λ, ia cukup dalam asal, buat transformasi berikut dalam graf M.


A. Semua keadaan, kecuali yang awal, yang mana hanya arka dengan label \lambda masuk, dipadamkan; dengan itu mentakrifkan set Q" bagi automaton terhingga M". Adalah jelas bahawa Q"\subseteq Q. Pada masa yang sama, kami menganggap bahawa keadaan awal tetap sama.


b.


Set lengkok bagi automaton terhingga M" dan labelnya (dengan itu fungsi peralihan M") ditakrifkan seperti berikut: untuk mana-mana dua keadaan p,r\in Q",~ p\to_(a)r berlaku jika dan hanya jika a \dalam V , dan dalam graf M terdapat satu daripada dua perkara: sama ada terdapat lengkok dari p ke r yang labelnya mengandungi simbol a, atau terdapat keadaan q sehingga p\Rightarrow_(\lambda)^( +)q dan q\ to_(a)r . Dalam kes ini, puncak q, secara amnya, mungkin bukan milik set Q", i.e. ia mungkin hilang apabila melalui automaton M" (Rajah 7.11). Jika q\in Q" , maka, secara semula jadi, arka (q,r) akan dikekalkan dalam M" dan simbol a akan menjadi salah satu simbol kepunyaan label arka ini (Rajah 7.12).


V. Set keadaan akhir F" automata terhingga M" mengandungi semua keadaan q\in Q", iaitu keadaan automata terhingga M yang tidak dipadamkan mengikut perenggan a, yang mana q\Rightarrow_(\lambda)^(\ ast) memegang q_f untuk beberapa q_f\in F (iaitu sama ada keadaan q itu sendiri adalah keadaan akhir automata terhingga M, atau laluan bukan sifar panjang membawa daripadanya di sepanjang lengkok berlabel \lambda kepada salah satu keadaan akhir bagi automatik terhingga M) (Rajah 7.13) .


2. Keazaman itu sendiri.


Biarkan M=(Q,V,q_0,F,\delta) menjadi automaton terhingga tanpa λ-peralihan. Marilah kita bina satu automata terhingga deterministik M_1 bersamaan dengan M.


Automat terhingga ini ditakrifkan sedemikian rupa sehingga set keadaannya ialah set semua subset set keadaan automata terhingga M. Ini bermakna setiap keadaan individu bagi automaton terhingga M_1 ditakrifkan sebagai subset tertentu bagi set keadaan bagi automaton terhingga M. Dalam kes ini, keadaan awal mesin keadaan terhingga baharu (iaitu M_1) ialah subset tunggal yang mengandungi keadaan awal mesin keadaan terhingga lama (iaitu M), dan keadaan akhir mesin keadaan terhingga baharu ialah kesemua subset sedemikian. Q yang mengandungi sekurang-kurangnya satu puncak akhir bagi automata terhingga asal M.


Selepas ini, membenarkan beberapa kebebasan bersuara, kadangkala kita akan memanggil keadaan set keadaan automata terhingga M_1. Walau bagaimanapun, adalah penting untuk memahami dengan jelas bahawa setiap set keadaan tersebut adalah keadaan berasingan bagi automata terhingga baharu, tetapi bukan satu set keadaannya. Pada masa yang sama, untuk automata terhingga M asal ("lama") ini adalah set keadaannya dengan tepat. Secara kiasan, setiap subset keadaan automaton terhingga lama "diruntuhkan" menjadi satu keadaan automata terhingga baharu*.


*Secara formal, kita harus mentakrifkan set Q_1 sebagai set yang berada dalam korespondensi satu-dengan-satu dengan set 2^Q, tetapi masih lebih mudah bagi kita untuk menganggap bahawa Q_1 bertepatan dengan 2^Q - selepas semua, set keadaan automaton terhingga boleh menjadi set terhingga bukan kosong.


Fungsi peralihan bagi automaton terhingga baharu ditakrifkan sedemikian rupa sehingga dari set keadaan S oleh simbol input a automata terhingga M_1 pergi ke set keadaan, yang merupakan penyatuan semua set keadaan terhingga lama. automaton di mana automaton terhingga lama ini melewati simbol a dari setiap set keadaan S. Oleh itu, automaton terhingga M_1 adalah deterministik dengan pembinaan.


Penerangan lisan di atas boleh diterjemahkan ke dalam formula seperti berikut: kami membina mesin terhingga M_1 supaya


M_1=(Q_1,V,\(q_0\),F_1,\delta_1) , di mana


\mulakan(kes)Q_1=2^Q,\quad F_1=\(T\colon\, T\cap F\ne\varnothing,~T\in2^Q\),\\ (\forall S\subseteq Q) (\untuk semua a\dalam V)\Bigl(\delta_1(S,a)= \bigcup\limits_(q\dalam S)\delta(q,a)\Bigr). \end(kes)


Marilah kita memberi perhatian kepada fakta bahawa antara keadaan automaton terhingga baharu terdapat keadaan \varnothing , dan, menurut (7.8), \delta_1(\varnothing,a)=\varnothing untuk sebarang simbol input a . Ini bermakna, apabila berada dalam keadaan sedemikian, mesin keadaan M_1 tidak akan meninggalkannya. Secara amnya, mana-mana keadaan q automata terhingga supaya untuk sebarang simbol input a yang kita ada \delta(q,a)=q dipanggil keadaan menyerap automata terhingga. Oleh itu, keadaan \varnothing mesin keadaan terhingga penentu M_1 sedang menyerap. Ia juga berguna untuk ambil perhatian bahawa \delta_1(S,a)=\varnothing jika dan hanya jika untuk setiap q\in S (keadaan mesin keadaan terhingga lama daripada set keadaan S ) \delta(q,a)= \varnothing , iaitu e. dalam graf M, tiada lengkok keluar dari setiap keadaan q tersebut, ditandakan dengan simbol a.


Ia boleh dibuktikan bahawa automaton terhingga yang diperoleh menggunakan algoritma ini adalah setara dengan yang asal.

Contoh 7.9.


Mari kita tentukan automaton terhingga yang ditunjukkan dalam Rajah. 7.14.



Automat terhingga yang setara tanpa peralihan λ ditunjukkan dalam Rajah. 7.15. Ambil perhatian bahawa bucu q_2 hilang, kerana hanya arka "kosong" yang memasukinya.


Untuk menentukan automaton yang terhasil, tidak perlu sama sekali untuk menulis semua keadaan 2^3=8nya, kebanyakannya mungkin tidak dapat dicapai dari keadaan awal \(q_0\) . Untuk mendapatkan keadaan yang boleh dicapai daripada \(q_0\), dan hanya mereka, kami akan menggunakan kaedah penarikan yang dipanggil.


Dalam automaton terhingga awal (tanpa arka kosong) kami mentakrifkan semua set keadaan yang boleh dicapai dari yang awal, i.e. untuk setiap simbol input a kita dapati set \delta(q_0,a) . Setiap set sedemikian dalam automaton baharu adalah keadaan yang boleh diakses secara langsung daripada yang awal.


Bagi setiap set keadaan yang ditentukan S dan setiap simbol input a, kita dapati set \textstyle(\mathop(\bigcup\limits_(q\in S) \delta(q,a))\limits^(\phantom( A)^( .))) . Semua keadaan yang diperoleh pada langkah ini akan menjadi keadaan automaton baharu (deterministik), boleh dicapai dari bucu awal di sepanjang laluan panjang 2. Kami mengulangi prosedur yang diterangkan sehingga tiada keadaan set baharu (termasuk yang kosong!) muncul. Ia boleh ditunjukkan bahawa ini menghasilkan semua keadaan automaton terhingga M_1 yang boleh dicapai dari keadaan awal \(q_0\) .


Untuk mesin keadaan terhingga dalam Rajah. 7.15 kita ada:


\begin(aligned)& \delta_1(\(q_0\),a)=\(q_1\);\qquad \delta_1(\(q_0\),b)=\(q_1,q_3\);\\ & \ delta_1(\(q_1\),a)=\(q_1\);\qquad \delta_1(\(q_1\),b)=\(q_1\);\\ & \delta_1(\(q_1,q_3\) ,a)= \delta(q_1,a)\cup \delta(q_3,a)= \(q_1\)\cup\(q_1\)=\(q_1\);\\ & \delta_1(\(q_1, q_3\),b)= \delta(q_1,b)\cup \delta(q_3,b)= \(q_1\)\cup\(q_1\)=\(q_1\). \end(aligned)


Oleh kerana tiada set keadaan baharu telah muncul, prosedur "menarik" berakhir di sini, dan kami mendapat graf yang ditunjukkan dalam Rajah. 7.16.

Penambahan bahasa biasa

Salah satu akibat teori penting teorem penentuan ialah teorem berikut.


Teorem 7.8.


Pelengkap bahasa biasa ialah bahasa biasa.


Menurut Teorem 7.7, untuk bahasa biasa L, satu automata terhingga yang menentukan M boleh dibina yang menerima L. Oleh kerana dalam automaton deterministik dari setiap bucu untuk setiap simbol input peralihan kepada tepat satu bucu ditakrifkan, maka apa pun rantai x dalam abjad V, terdapat laluan unik untuknya dalam M, bermula dalam keadaan awal di mana rantai x dibaca. Adalah jelas bahawa rantai x dibenarkan oleh automaton M , iaitu, x\in L(M) , jika dan hanya jika keadaan terakhir laluan yang ditentukan adalah muktamad. Ia berikutan bahawa rantaian x\notin L(M) jika dan hanya jika keadaan terakhir laluan yang ditentukan tidak muktamad. Tetapi kita hanya memerlukan automaton terhingga M" yang menerima rantai x jika dan hanya jika ia tidak dibenarkan oleh automaton terhingga asal M. Oleh itu, menjadikan setiap keadaan akhir M menjadi keadaan bukan akhir dan sebaliknya, kita memperoleh automaton deterministik yang menerima penambahan bahasa L .


Teorem terbukti membolehkan kita membina automaton terhingga yang tidak menerima set rantai tertentu, menggunakan kaedah berikut: kita mula-mula membina automaton yang menerima set rantai tertentu, kemudian kita menentukannya dan pergi ke automaton untuk penambahan sebagai ditunjukkan dalam bukti Teorem 7.8.

Contoh 7.10.


A. Mari bina automata terhingga yang menerima semua rantai dalam abjad \(0;1\) kecuali rantai 101.



Mula-mula, mari kita bina sebuah automaton terhingga yang membenarkan rantai tunggal 101. Automatik ini ditunjukkan dalam Rajah. 7.17.



Automatik ini adalah kuasi-deterministik, tetapi tidak deterministik, kerana ia tidak ditakrifkan sepenuhnya. Marilah kita tentukan dan dapatkan automata terhingga setara deterministik yang ditunjukkan dalam Rajah. 7.18.


Dan akhirnya, beralih ke penambahan (dan menamakan semula keadaan), kami mendapat automaton yang ditunjukkan dalam Rajah. 7.19.


Ambil perhatian bahawa dalam automaton yang terhasil semua bucu, kecuali untuk bucu s_3, adalah muktamad.


Perhatikan juga bahawa mesin keadaan terhingga dalam Rajah. 7.19 membenarkan semua rentetan yang mengandungi kejadian rentetan 101 tetapi tidak sepadan dengan rentetan itu sendiri. Di sini, sebagai contoh, ialah laluan yang membawa rantai 1011: s_0,s_1,s_2,s_3,t.


b.


Mari kita bina automata terhingga yang menerima semua rantai dalam abjad \(0;1\) kecuali yang mengandungi kejadian rentetan 101. Pertimbangkan bahasa L, setiap rantai yang mengandungi kejadian rentetan 101. Ia boleh ditakrifkan seperti berikut:


L=(0+1)^(\ast)101(0+1)^(\ast).


Kita perlu membina automaton untuk melengkapkan bahasa L.



Dalam kes ini, menggunakan ungkapan biasa secara langsung, adalah mudah untuk membina automaton terhingga yang menerima bahasa L (Rajah 7.20).



Kemudian kami akan menjalankan penentuan menggunakan kaedah "tarik". Keputusan penentuan dibentangkan dalam Rajah. 7.21.



Untuk menyelesaikan masalah sepenuhnya, semua yang tinggal adalah dalam Rajah. 7.21 menukar peranan bucu akhir dan bukan akhir (Rajah 7.22).


V. Mari kita bincangkan idea membina automaton terhingga yang membenarkan mereka dan hanya rantai dalam abjad \(0;1\) yang tidak bermula dengan rantai 01 dan tidak berakhir dengan rantai 11 (iaitu, rantai bagi bentuk 01x dan rantai jenis y11 tidak dibenarkan, tidak kira apa pun rantai x,y\in\(0;1\) ).

Dalam kes ini, pelengkap bahasa yang diperlukan untuk membina automaton terhingga ialah set semua rantai sifar tersebut dan yang bermula dengan rantai 01 atau berakhir dengan rantai 11. Automat yang membenarkan set ini rantai dibina sebagai automaton untuk menggabungkan 01(0+1)^(\ ast)+(0+1)^(\ast)11 dengan cara yang sama seperti yang diterangkan dalam bukti teorem Kleene (lihat Teorem 7.6).


Daripada sifat bahawa kelas bahasa biasa ditutup berkenaan dengan pelengkap (lihat Teorem 7.8) ia serta-merta mengikuti bahawa kelas ini ditutup berkenaan dengan persilangan, set-teoretik dan perbezaan simetri.


Akibat 7.3.
Untuk mana-mana dua bahasa biasa L_1 dan L_2 pernyataan berikut adalah benar:
1) persimpangan L_1\cap L_2 adalah tetap;


2) perbezaan L_1\settolak L_2 adalah tetap;


3) perbezaan simetri L_1\vartriangle L_2 adalah sekata.


Pertama, keputusan yang diperoleh membolehkan kami menegaskan bahawa kelas bahasa biasa berkenaan dengan operasi kesatuan, persilangan dan penambahan ialah algebra Boolean, di mana unitnya ialah bahasa universal, dan sifar ialah bahasa kosong. Kedua, sifat algebra keluarga bahasa biasa ini membolehkan kita menyelesaikan masalah penting untuk mengenali kesetaraan dua automata terhingga sewenang-wenangnya.


Menurut Definisi 7.10, mesin keadaan terhingga adalah setara jika bahasa yang mereka terima adalah sama. Oleh itu, untuk mengesahkan kesetaraan automata M_1 dan M_2, cukup untuk membuktikan bahawa perbezaan simetri bahasa L(M_1) dan L(M_2) adalah kosong. Untuk melakukan ini, pada gilirannya, cukup untuk membina automasi yang mengakui perbezaan ini dan memastikan bahawa bahasa yang diakuinya kosong. Secara umum, masalah mengenali bahasa mesin keadaan kosong dipanggil masalah kekosongan mesin keadaan. Untuk menyelesaikan masalah ini, sudah cukup untuk mencari set keadaan akhir automaton yang boleh dicapai dari keadaan awal. Memandangkan mesin keadaan terhingga ialah graf terarah, masalah ini boleh diselesaikan, contohnya, menggunakan carian luas-dahulu. Bahasa yang dibenarkan oleh mesin keadaan terhingga adalah kosong jika dan hanya jika set keadaan akhir yang boleh dicapai dari keadaan awal kosong. Dalam amalan, adalah lebih baik untuk mengenali kesetaraan automata terhingga menggunakan algoritma pengecilan, tetapi kini adalah penting bagi kita untuk menekankan bahawa kemungkinan asas untuk menyelesaikan masalah kesetaraan berikutan daripada Teorem 7.7 dan akibat algebranya.

DKA ialah kes khas NKA. Di dalamnya:

    tiada keadaan dengan ε-peralihan;

    bagi setiap keadaan S dan simbol input a, terdapat paling banyak satu lengkok yang terpancar daripada S dan dilabelkan a.

DFA hanya mempunyai maksimum satu peralihan untuk sebarang simbol input daripada setiap negeri. Jika jadual digunakan untuk mewakili fungsi peralihan DFA, maka setiap rekod akan mengandungi hanya satu keadaan. Oleh itu, adalah mudah untuk menyemak sama ada DFA tertentu menerima baris tertentu, kerana hanya terdapat satu laluan dari keadaan permulaan, yang ditandakan dengan baris ini.

Rajah 3 menunjukkan graf peralihan DFA yang menerima bahasa yang sama (a|b) * a(a|b)(a|b) sebagai NFA dalam Rajah 1.

Rajah 3. DFA membenarkan rentetan (a|b) * a(a|b)(a|b).

Automatik terhingga deterministik M yang menerima bahasa yang diberikan:

M = ((1, 2, 3, 4, 5, 6, 7, 8), (a, b), D, 1, (3, 5, 6, 8))

Fungsi peralihan D ditakrifkan seperti berikut:

Membina nka menggunakan ungkapan biasa

1. Untuk ε NKA mempunyai bentuk berikut (0 – keadaan awal, 1 – keadaan akhir):

2. Untuk yang disertakan dalam bahasa NKA tertentu:

3. Biarkan N(s) dan N(t) menjadi NFA untuk ungkapan biasa s dan t.

Untuk ungkapan biasa s|t, NFA komposit mempunyai bentuk berikut:

b. Untuk ungkapan biasa st NKA:

Dengan. Untuk ungkapan s* NFA mempunyai bentuk:

d. Untuk ungkapan dalam kurungan (s), NFA N(s) digunakan seperti dalam titik a.

Setiap negeri baharu menerima nama individu. Pembinaan NFA N(r) mempunyai ciri-ciri berikut:

N(r) mempunyai bilangan keadaan yang tidak melebihi bilangan simbol lebih daripada 2 kali.

N(r) mempunyai tepat satu keadaan awal dan satu keadaan akhir. Keadaan akhir tidak mempunyai peralihan keluar.

Setiap keadaan N(r) mempunyai sama ada 1 peralihan untuk simbol daripada abjad (), atau tidak lebih daripada 2 peralihan ε keluar.

Menukarkan nka kepada dka.

NFA dalam Rajah 1 mempunyai 2 peralihan daripada keadaan 0 untuk simbol a: menyatakan 0 dan 1. Peralihan sedemikian adalah samar-samar, seperti peralihan dalam ε. Memodelkan satelit sedemikian menggunakan program komputer adalah lebih sukar. Takrif kebolehlaksanaan menyatakan bahawa mesti ada beberapa laluan dari keadaan awal ke keadaan akhir, tetapi apabila terdapat berbilang laluan untuk rentetan input yang sama, mereka semua mesti dipertimbangkan untuk mencari laluan ke keadaan akhir atau mengetahui bahawa terdapat bukan jalan sedemikian.

Dalam jadual peralihan NKA, setiap entri sepadan dengan banyak negeri, tetapi dalam jadual peralihan DKA, hanya ada satu. Intipati transformasi ialah setiap keadaan DFA sepadan dengan satu set keadaan NFA. DFA menggunakan keadaannya untuk menjejaki semua kemungkinan keadaan yang mungkin ada NFA selepas membaca simbol input seterusnya. Iaitu, selepas membaca aliran input, DFA berada dalam keadaan yang mewakili set keadaan tertentu NFA, boleh dicapai dari yang awal di sepanjang laluan yang sepadan dengan rentetan input. Bilangan keadaan DFA sedemikian boleh melebihi bilangan keadaan NFA (pergantungan eksponen) dengan ketara, tetapi dalam amalan ini sangat jarang berlaku, dan kadangkala terdapat lebih sedikit negeri dalam DFA berbanding NFA.

Mari kita pertimbangkan transformasi sedemikian menggunakan contoh khusus. Rajah 4 menunjukkan NFA lain yang membenarkan bahasa (a|b) * a(a|b)(a|b) (seperti dalam Rajah 1 dan 3).

Rajah 4. Bahasa penerimaan NFA (a|b) * a(a|b)(a|b)

Peralihan daripada keadaan 13 kepada keadaan 14 yang ditunjukkan dalam rajah boleh diwakili sama seperti peralihan dari keadaan ke-8 kepada keadaan ke-13.

Mari kita bina DFA untuk bahasa ini. Keadaan permulaan DFA yang setara ialah keadaan A = (0, 1, 2, 4, 7), iaitu keadaan yang boleh dicapai dari 0 oleh ε.

Abjad simbol input ialah (a, b). Daripada keadaan awal A, seseorang boleh mengira keadaan yang boleh dicapai oleh a. Mari kita panggil keadaan ini B = (1, 2, 3, 4, 6, 7, 8, 9, 11, 13, 14).

Antara negeri di A, hanya negeri 4 mempunyai peralihan sepanjang b ke negeri 5, jadi DFA mempunyai peralihan sepanjang b dari A ke keadaan C = (1, 2, 4, 5, 6, 7).

Jika kita meneruskan proses ini dengan keadaan B dan C, semua set keadaan NFA akan ditanda. Oleh itu kita akan mempunyai set keadaan:

A = (0, 1, 2, 4, 7)

B = (1, 2, 3, 4, 6, 7, 8, 9, 11, 13, 14)

C = (1, 2, 4, 5, 6, 7)

D = (10, 12, 13, 14)

Keadaan A ialah keadaan awal, dan keadaan B, D, E adalah muktamad.

Jadual peralihan penuh diberikan di bawah.

Di bawah dalam Rajah 5 ialah DFA sendiri untuk bahasa ini.

Rajah 5. Bahasa penerimaan DFA (a|b) * a(a|b)(a|b)

Senarai kesusasteraan yang digunakan:

Pentus A. E., Pentus M. R. – Teori bahasa formal

A. Aho, R. Sethi, D. Ullman - Penyusun: prinsip, teknologi, alatan.

Ungkapan biasa (RE) ialah satu bentuk penulisan yang sangat mudah yang dipanggil bahasa biasa atau automata. Oleh itu, RT digunakan sebagai bahasa input dalam banyak sistem yang memproses rantai. Mari kita lihat contoh sistem sedemikian:

  • Perintah grep Unix atau perintah serupa mencari rentetan yang terdapat dalam pelayar web atau sistem pemformatan teks. Dalam sistem sedemikian, RF digunakan untuk menerangkan corak yang dicari oleh pengguna dalam fail. Pelbagai enjin carian menukar enjin carian kepada sama ada mesin keadaan terhingga deterministik (DFA) atau mesin keadaan terhingga bukan deterministik (NFA) dan menggunakan mesin ini pada fail yang sedang dicari.
  • Penjana penganalisis leksikal. Penganalisis leksikal adalah komponen pengkompil; mereka memecahkan program sumber kepada unit logik (token), yang boleh terdiri daripada satu atau lebih aksara dan mempunyai makna tertentu. Penjana penganalisis leksikal menerima huraian rasmi leksem, yang pada asasnya adalah RV, dan mencipta DFA yang mengenali leksem yang mana muncul dalam inputnya.
  • RV dalam bahasa pengaturcaraan.

Dalam artikel ini, kita mula-mula akan berkenalan dengan mesin keadaan terhingga dan jenisnya (DFA dan NFA), dan kemudian mempertimbangkan contoh membina DFA minimum menggunakan ungkapan biasa.

Mesin keadaan terhingga Mesin keadaan terhingga (FA) ialah penukar yang membolehkan anda mengaitkan input dengan output yang sepadan, dan output ini boleh bergantung bukan sahaja pada input semasa, tetapi juga pada apa yang berlaku sebelum ini, pada sejarah operasi. daripada mesin keadaan terhingga. Malah tingkah laku manusia, dan bukan hanya sistem buatan, boleh digambarkan menggunakan kapal angkasa. Sebagai contoh, reaksi anda terhadap fakta bahawa jiran anda mendengar muzik yang kuat pada waktu malam akan menjadi reaksi selepas kejadian pertama dan berbeza sama sekali selepas beberapa kejadian sedemikian. Mungkin terdapat bilangan prasejarah yang tidak terhingga; persoalan timbul: apakah jenis ingatan yang perlu dimiliki oleh kapal angkasa untuk berkelakuan berbeza untuk setiap prasejarah? Adalah jelas bahawa adalah mustahil untuk menyimpan bilangan latar belakang yang tidak terhingga. Oleh itu, jenis automaton memecahkan semua latar belakang yang mungkin menjadi kelas kesetaraan. Dua sejarah adalah setara jika ia mempunyai kesan yang sama pada kelakuan mesin pada masa hadapan. Kelas kesetaraan yang mana automaton telah menetapkan sejarah semasanya juga dipanggil keadaan dalaman automaton.

Mari kita pertimbangkan contoh operasi kapal angkasa primitif:

Kapal angkasa ini terdiri daripada:

  • pita yang diwakili oleh rantai input.
  • peranti membaca.
  • blok kawalan yang mengandungi senarai peraturan peralihan.

Pembaca boleh bergerak ke satu arah, biasanya dari kiri ke kanan, dengan itu membaca aksara rentetan input. Bagi setiap pergerakan sedemikian, ia boleh mengira satu simbol. Seterusnya, aksara baca dihantar ke unit kawalan. Unit kawalan mengubah keadaan mesin berdasarkan peraturan peralihan. Jika senarai peraturan peralihan tidak mengandungi peraturan untuk simbol baca, maka mesin "mati".

Sekarang mari kita lihat cara CA boleh ditentukan. Ia boleh dinyatakan dalam bentuk graf atau dalam bentuk jadual kawalan. Dalam bentuk graf, CA ditentukan dengan cara berikut:

  • bucu graf sepadan dengan keadaan kapal angkasa.
  • tepi terarah sepadan dengan fungsi peralihan (di sebelah setiap tepi tersebut simbol di mana peralihan dilakukan ditunjukkan).
  • bucu dengan tepi memasukinya yang tidak meninggalkan lebih daripada satu keadaan sepadan dengan keadaan awal.
  • keadaan akhir kapal angkasa ditandakan dengan garis besar yang tebal.

Dalam bentuk jadual kawalan, seperti ini:

  • keadaan kapal angkasa terletak di barisan meja.
  • aksara bahasa yang diiktiraf berada dalam lajur.
  • di persimpangan, keadaan ditunjukkan yang boleh dicapai dari keadaan tertentu menggunakan simbol yang diberikan.

Contoh CA dalam bentuk graf dan dalam bentuk jadual kawalan akan dibentangkan di bawah.

DKA dan NKA

Perbezaan utama antara DKA dan NKA ialah DKA hanya boleh berada dalam satu keadaan semasa operasi, manakala NKA boleh berada di beberapa negeri pada masa yang sama. Sebagai contoh kerja NCA, seseorang boleh memetik idea ahli fizik Amerika Hugh Everett bahawa sebarang peristiwa memisahkan dunia kepada beberapa dunia, di mana setiap peristiwa ini berakhir dengan caranya sendiri. Sebagai contoh, dalam satu dunia Hitler memenangi Perang Dunia Kedua, di dunia lain, Newton pergi ke dalam perniagaan dan bukannya fizik dan penemuan undang-undang mekanik klasik terpaksa ditangguhkan selama 50 tahun untuk membuat sebarang kesimpulan daripada operasi automaton, semua "dunia" harus dikaji. Selepas keseluruhan rantaian input dibaca, kami menganggap bahawa NFA menerima rantaian ini jika ia telah menyelesaikan operasi dalam keadaan menerima sekurang-kurangnya satu daripada banyak "dunia". Sehubungan itu, automaton menolak rantai jika ia ditamatkan dalam keadaan tidak menerima di setiap "dunia". DKA menerima rantaian; ini jelas jika, selepas membaca keseluruhan rantaian input, ia mendapati dirinya dalam keadaan menerima.

Dalam kebanyakan kes, adalah lebih mudah untuk membina NKV daripada DKA. Tetapi walaupun ini, menggunakan NKA untuk pemodelan bukanlah idea yang baik. Nasib baik, untuk setiap NFA adalah mungkin untuk membina DFA yang menerima bahasa input yang sama. Dalam artikel ini kami tidak akan membentangkan algoritma untuk membina DFA menggunakan NFA, tetapi akan mempertimbangkan algoritma ini berdasarkan contoh ilustrasi di bawah.

Membina DFA minimum menggunakan ungkapan biasa

Sebagai permulaan, berikut ialah senarai operasi RT yang digunakan dalam artikel ini, mengikut keutamaan:

  • lelaran (penutupan Kleene), menggunakan simbol "*"
  • penggabungan ditentukan menggunakan ruang atau rentetan kosong (contohnya: ab)
  • menyertai menggunakan simbol "|".

Mari kita lihat contoh di mana ungkapan biasa diberikan:

Xy* (x | y*) |

ab (x | y*) |

(x | a*) (x | y*)

Ia adalah perlu untuk membina DFA minimum menggunakan ungkapan biasa dan menunjukkan pengecaman rantai yang betul dan salah.

Sebagai permulaan, mari kita permudahkan RV ini, dengan menggunakan undang-undang pengedaran kanan bagi penggabungan berkenaan dengan kesatuan, kita memperoleh RV berikut:

(xy* | ab | (x | a*)) (x | y*)

Kini kami membina automasi berdasarkan RV ini:

Menurut peraturan untuk menukar penggabungan (kami tidak akan memberikan peraturan untuk menukar RV kepada CA, kerana ia agak jelas), kami memperoleh automaton berikut:

Dan pada akhirnya kami menggunakan peraturan transformasi penutupan dan mendapatkan εNKA. Di sini adalah perlu untuk membuat tempahan bahawa εNKA ialah NKA yang mengandungi ε-peralihan. Sebaliknya, peralihan ε ialah peralihan di mana mesin tidak mengambil kira rantaian input atau, dengan kata lain, peralihan di sepanjang simbol kosong.

Kami menyingkirkan ε-transitions ("asterisk" menandakan keadaan akhir):

Dalam NFA ini, keadaan s3 dan s5 adalah setara, kerana δ(s3, x) = δ(s5, x) = s1 dan δ(s3, y) = δ(s5, y) = s5, s7. Namakan semula keadaan s6 -> s5 dan s7 -> s6:

Kami membina DKA mengikut NKA:

Dalam DFA ini, keadaan p1 dan p5 adalah setara, kerana
δ(p1, x) = δ(p5, x) = p4 dan δ(p1, y) = δ(p5, y) = p5. Namakan semula keadaan p6 -> p5 dan p7 -> p6:

Mesin ini adalah DKA minimum.

Biarkan δ ialah fungsi peralihan, maka kita nyatakan fungsi peralihan lanjutan yang dibina daripada δ oleh δ’, dan ω ialah rantai input.

Katakan input ialah rantai ω = aaax, kami menjangkakan bahawa mesin akan berada dalam salah satu keadaan menerima.

δ’(p0, ε) = p0
δ’(p0, a) = δ(δ’(p0, ε), a) = δ(p0, a) = p3
δ’(p0, aa) = δ(δ’(p0, a), a) = δ(p3, a) = p5
δ’(p0, aaa) = δ(δ’(p0, aa), a) = δ(p5, a) = p5
δ’(p0, aaax) = δ(δ’(p0, aaa), x) = δ(p5, x) = p4

P4 ialah keadaan akhir yang sah, jadi rantai aaax adalah betul untuk mesin ini.

Sekarang mari kita anggap bahawa ω = xyyb:

δ’(p0, ε) = p0
δ’(p0, x) = δ(δ’(p0, ε), x) = δ(p0, x) = p1
δ’(p0, xy) = δ(δ’(p0, x), y) = δ(p1, y) = p1
δ’(p0, xyy) = δ(δ’(p0, xy), y) = δ(p1, y) = p1
δ’(p0, xyyb) = δ(δ’(p0, xyy), b) = δ(p1, b) = ∅

Di sini kita melihat bahawa jika kita memberikan simbol b kepada input automaton apabila ia berada dalam keadaan p1, maka automaton ini akan mati, oleh itu rantai xyyb adalah tidak betul.

P. S. Artikel ini membincangkan algoritma untuk membina DFA menggunakan RT, tetapi terdapat algoritma yang lebih mudah, khususnya untuk pengaturcaraan, tetapi ini adalah topik untuk artikel lain...