Mengapa NFA disebut Non-deterministik?

14

Saya punya pertanyaan [agak lucu] di benak saya. Mengapa otomat hingga non-deterministik disebut non-deterministik sementara kami mendefinisikan transisi untuk input. Yah, meskipun ada beberapa transisi dan epsilon , mereka didefinisikan yang berarti bahwa mesin itu deterministik untuk transisi tersebut. Yang berarti itu deterministik.

Madhusoodan P
sumber
12
Nondeterministik seperti yang digunakan dalam ilmu komputer teoretis berbeda dari acak.
adrianN
10
Ini adalah pilihan antara transisi yang tidak deterministik.
reinierpost
Apa itu NFA? (Untuk yang belum tercerahkan di antara kita)
DarcyThomas
@DarcyThomas, pengantar pertama yang saya miliki adalah swtch.com/~rsc/regexp/regexp1.html . Ini adalah bacaan yang bagus — ini bukan tujuan artikel untuk memperkenalkan NFA, tetapi melakukan pekerjaan dengan baik dalam diskusi tentang ekspresi reguler.
Wildcard

Jawaban:

22

"Deterministik" berarti "jika Anda menempatkan sistem dalam situasi yang sama dua kali, dijamin untuk membuat pilihan yang sama dua kali".

"Non-deterministik" berarti "tidak deterministik", atau dengan kata lain, "jika Anda menempatkan sistem dalam situasi yang sama dua kali, mungkin atau mungkin tidak membuat pilihan yang sama dua kali".

Otot terbatas hingga non-deterministik (NFA) dapat memiliki beberapa transisi keluar dari keadaan. Ini berarti ada beberapa opsi untuk apa yang dapat dilakukan dalam situasi itu. Tidak dipaksa untuk selalu memilih yang sama; pada satu input, itu mungkin memilih transisi pertama, dan pada input lain itu mungkin memilih transisi yang sama.

Di sini Anda dapat menganggap "situasi" sebagai "keadaan NFA saat ini, bersama dengan simbol apa yang sedang dibaca berikutnya dari input". Bahkan ketika keduanya sama, NFA mungkin masih memiliki beberapa transisi yang cocok yang dapat dikeluarkan dari negara itu, dan itu dapat memilih secara sewenang-wenang mana yang akan diambil. Sebaliknya, DFA hanya memiliki satu transisi yang cocok yang dapat diambil dalam situasi itu, sehingga tidak memiliki pilihan - selalu akan mengikuti transisi yang sama setiap kali berada dalam situasi itu.

DW
sumber
"Itu dapat memilih secara sewenang-wenang mana yang akan diambil." Jadi pada dasarnya memiliki sifat probabilistik?
Trilarion
@Trilarion, tidak, itu tergantung pada apakah itu mengarah ke status penerimaan atau tidak. Faktanya, FA probabilistik adalah generalisasi untuk NFA.
rus9384
"Non-deterministik" berarti "tidak deterministik", atau dengan kata lain, "jika Anda menempatkan sistem dalam situasi yang sama dua kali, mungkin atau mungkin tidak membuat pilihan yang sama dua kali". maksud Anda, mesin ini dapat menerima dan menolak string yang sama dalam dua kasus berbeda.
Madhusoodan P
3
@ MadhusoodanP Intuisi Anda benar dari apa yang ditulis di sini, dan itu membawa kita pada apa yang hilang dari jawaban ini: Saat menganalisis NFA, kami selalu mempertimbangkan semua jalur eksekusi yang memungkinkan . Selama jalur apa pun di mesin itu mengarah ke status penerimaan, kami menganggap input sebagai diterima. Jadi ini bukan tentang probabilitas sama sekali, ini hanya tentang apakah suatu negara penerima dapat dicapai atau tidak. Intuisi ini menjadi lebih jelas ketika memikirkan bagaimana NFA direduksi menjadi DFA: Kita harus mensimulasikan semua kemungkinan eksekusi NFA, yang mengarah pada ledakan eksponensial dalam konstruksi.
ComicSansMS
3
Cara untuk memvisualisasikannya adalah dengan mengasumsikan bahwa, di mana banyak transisi dapat dipilih, NFA mengambil semua transisi. Anda membuat struktur mirip pohon dari semua status yang dicapai oleh string input, dan jika ada cabang yang berakhir pada status penerimaan, string diterima. Dengan kata lain, dengan DFA, Anda meminta "adalah negara dicapai dengan masukan saya seorang menerima keadaan?", Sedangkan dengan NFA, Anda meminta "adalah setiap negara yang bisa dicapai dengan masukan saya seorang menerima negara?".
Harrison Paine
8

Ambil otomat ini sebagai contoh, ini adalah NFA dan ia menerima string . Untuk menjadi lebih bertele-tele, ia menerima string yang berakhir pada 10 .011010

Example automaton, source: /cs/61159/what-is-the-difference-between-following-two-finite-automata/61208

Untuk melihat itu, kita hanya perlu memeriksa apakah sudah mencapai kondisi terima.

q01q00q11q20

Sekarang di garis merah ada kemungkinan lain, yaitu ketika membaca kedua saya bisa tetap di q 0 dan kemudian tetap di q 0 saat membaca 0 terakhir . Automata tidak memiliki memori, jadi tidak ada cara untuk 'menyimpan' keadaan dan memeriksa kemudian jika string saya berakhir dengan 10 , itu seperti NFA ini membuat menebak apakah string berakhir dengan 10 sebelum bercabang ke keadaan yang dapat diterima. Ketidakpastian di sini membuat banyak pilihan dan selalu membuat yang benar.1q0q001010

Lebih mudah untuk membangun NFA daripada membangun DFA, hal baiknya adalah keduanya sama .

Aristu
sumber
Ya saya tahu bagian teori NFA. Tapi yang saya tanyakan adalah meskipun ada beberapa transisi untuk satu karakter input, mesin ini menentukan apa yang bisa dicapai oleh semua negara (katakanlah dengan membuat utas). Oleh karena itu secara harfiah DFA. [Atau apakah Anda pikir saya salah menafsirkan makna determinisme ]
Madhusoodan P
1
Contohnya mungkin ditingkatkan dengan NFA sedikit lebih rumit, karena DFA untuk tujuan yang sama akan menggunakan jumlah negara yang sama dengan NFA Anda dan tidak akan terlalu rumit. Sebaliknya, mencocokkan ekspresi reguler yang lebih rumit mungkin memerlukan DFA yang rumit dan berantakan tetapi sepele dalam NFA.
supercat
@ supercat, setidaknya itu akan baik untuk dilihat ε-transisi.
rus9384
1
@Aristu Jika Anda menerapkan NFA dalam bahasa pemrograman favorit Anda, utas adalah pilihan yang buruk . Alih-alih, Anda hanya perlu melacak set status yang otomatnya "mungkin berada" setelah setiap karakter input dibaca. Kode yang dihasilkan akan hampir secepat implementasi DFA.
David Richerby
1
@Aristu Siklus ϵ-transisi akan menjadi canggung, ya, tetapi masalah utama adalah bahwa utas memiliki biaya overhead yang sangat besar dibandingkan dengan skema sederhana yang tidak ditelusuri. Solusi berulir memerlukan kontrol konkurensi, beberapa cara untuk membunuh utas setelah perhitungan yang diterima telah ditemukan, beberapa cara untuk mengetahui bahwa semua utas ditolak, ...
David Richerby
5

Fungsi transisi dari NFA menentukan transisi yang diizinkan pada suatu titik waktu. Mungkin ada lebih dari satu opsi, dan NFA memilih transisi yang tidak ditentukan dengan tujuan mencapai negara penerima.

Mungkin Anda harus menunggu sampai Anda belajar tentang mesin Turing nondeterministic. Nondeterminisme memiliki arti yang sama dalam kedua kasus.

Yuval Filmus
sumber
dapatkah Anda menyoroti bahwa "transisi tidak ditentukan". Dan juga tolong tinjau jawaban saya
Madhusoodan P
Saya pikir kedua jawaban kami tidak super bagus, meskipun intuisi Anda bagus.
Yuval Filmus
3

Mulailah dengan Finite Automaton. Ia memiliki status dan status penerimaan dan transisi.

Sekarang, berikan lebih dari satu aturan trasisi dari masing-masing negara bagian, dan katakan bahwa ia menerima jika ada seperangkat aturan transisi yang diambil setelah fakta yang mengarah ke status penerimaan diberikan string input.

Setelah Anda memiliki string input Anda, ada satu set tetap transisi beton dan menyatakan melalui (satu per satu) untuk menerima string itu. Tetapi transisi yang dipilihnya hanya dipilih pada akhir string . Saat string sedang dibaca, jalur mana yang harus diambil tidak ditentukan.

Ini tidak menentukan. Ia dapat memilih jalurnya melalui grafik setelah Anda memberikan seluruh masalahnya, bukan saat membaca input.


Sekarang, kami memformalkan ini secara berbeda dari eksperimen pemikiran ini, tetapi ini memberi Anda motivasi mengapa ia mendapatkan nama itu.

Ini menjelaskan bagaimana nama itu didapatkan. Ya, Anda dapat memodelkan NDFA dengan cara yang sepenuhnya deterministik, tetapi nama-nama itu melekat . Setelah Anda memanggil sesuatu Bob, ada biaya komunikasi untuk mengganti nama menjadi sesuatu yang lain karena tidak ada yang tahu apa yang Anda bicarakan ketika Anda menyebutnya Alice.

Yakk
sumber
Iya! Saya setuju dengan penjelasan Anda tentang NFA. Tetapi pertanyaan saya adalah tentang mengapa itu Non-deterministik meskipun set negara didefinisikan untuk input tunggal
Madhusoodan P
@ MadhusoodanP Disebut non-deterministik karena cara itu diciptakan / dibayangkan. Dan nama-nama itu lengket, bahkan setelah kita mendefinisikan cara multilpe sepenuhnya deterministik untuk memodelkannya.
Yakk
1

Dari wikipedia , cara terbaik untuk memikirkan hal ini adalah mulai dengan mesin keadaan terbatas deterministik (DFA). Untuk DFA, setiap transisi secara unik ditentukan oleh kondisi saat ini dan simbol input yang akan diproses. Mesin negara hingga non-deterministik (NFA) hanyalah apa yang Anda dapatkan ketika Anda mengendurkan aturan determinisme ini untuk memungkinkan transisi agar tidak didefinisikan secara unik. Itu yang Anda dapatkan ketika Anda menghapus aturan determinisim dari DFA.

Cort Ammon - Pulihkan Monica
sumber
Ini sedikit lebih rumit, karena nondeterminisme juga merupakan kondisi penerimaan yang spesifik.
Yuval Filmus
1

NFA dan DFA keduanya digunakan untuk (antara lain) mengenali string tertentu.

Otomat terbatas hingga non-deterministik berfungsi seperti itu memiliki pengaruh pada keputusannya - ia dapat "memilih" untuk mengikuti jalan, atau tidak.

NFA example

Pada gambar di atas, ketika kita berurusan dengan string "00111", perhatikan bahwa ketika menemukan "1" pertama, ada dua cara yang mungkin untuk diikuti. Seseorang dapat tinggal di "p" atau pergi ke "q". Jika automata akan dipindahkan ke "q", itu tidak akan menerima string (karena tidak ada tepi yang keluar dari "q"). Tetapi string dapat diterima oleh automata ini dengan pergi ke "q" dengan hanya 1 yang terakhir, sementara tetap di "p" untuk segala sesuatu yang lain (dan itulah yang terjadi).

NFA membuatnya tampak seperti automata "tahu" apa yang ada di depan, dan memilih yang sesuai.

Tentu saja tidak. DFA dan NFA adalah setara dalam hal kekuatan (Anda dapat mengurangi NFA menjadi DFA dan membuat DFA (mungkin) lebih sederhana dengan penggunaan NFA), tetapi NFA berguna, karena telah memungkinkan untuk mendefinisikan bahasa yang sama dengan DFA sambil menjaga grafik jauh lebih pendek dan lebih mudah dibaca.

Tidak ada yang acak di sana. Bagian non-deterministik menekankan pada fakta bahwa ada beberapa "pilihan" untuk diambil, tetapi kenyataannya adalah bahwa automata tidak mengambil keputusan apa pun.

MatthewRock
sumber
0

Nah di sini adalah campuran dari beberapa konten dari buku [Pengantar Bahasa Resmi dan Automata oleh Peter Linz 4E] dan pemahaman saya.

Pertimbangkan program bermain game di mana mesin perlu membuat keputusan untuk langkah selanjutnya [katakan untuk tic-tac-toe]. Karena ada beberapa gerakan yang mungkin, kami dengan pasti memilih setiap gerakan dan mengevaluasi langkah itu dan memilih yang terbaik. Meskipun proses seleksi bersifat deterministik dan ada banyak kemungkinan gerakan, langkah terakhir yang dibuat adalah langkah tunggal dan dipilih sebagai langkah terbaik sambil menyembunyikan semua perhitungan langkah yang dicoba dari lawan. [Di sini kita mengasumsikan bahwa proses evaluasi setiap gerakan yang mungkin disembunyikan dari lawan].

Karenanya hanya satu pilihan yang dibuat dan lawan diberi ilusi sehingga langkah itu tidak deterministik.

Nah jika Anda belum yakin dengan meminta bahwa langkah terbaik adalah produk dari beberapa perhitungan deterministik maka Anda harus mempertimbangkan mesin yang membuat gerakan acak sempurna (mungkin mesin kehilangan tetapi ini adalah NFA).

Madhusoodan P
sumber
1
Cara lain untuk menyatakan ini: pada lawan , pilihan Anda tidak deterministik. Saat memodelkan sistem dari tampilan lawan, gerakan Anda adalah pilihan yang tidak ditentukan, kecuali jika lawan telah mengetahui proses deterministik di belakangnya.
reinierpost
@reinierpost persis apa yang ingin saya sampaikan
Madhusoodan P
Contoh yang lebih menarik mungkin berupa permainan potongan informasi terbatas (misalnya gaya "polisi dan perampok"). Satu pemain menggerakkan perampok di sekitar labirin sementara pemain lain memindahkan polisi. Kapan saja ketika seorang polisi dapat melihat seorang perampok, negara perampok itu akan menjadi lokasinya, tetapi pada setiap kesempatan ketika tidak ada polisi yang melihat perampok itu, perampok tersebut dapat bertransisi ke setiap kotak yang berdekatan dengan posisinya dan bahwa polisi dapat dapat melihat pada saat itu.
supercat
@supercat Bagus, tetapi transisi yang dibuat selalu merupakan keadaan tunggal, dan jika Anda menyembunyikan perhitungan langkah terbaik, sepertinya tidak deterministik
Madhusoodan P