Ya, Anda benar bahwa komputer adalah otomatisasi deterministik. Model non-deterministik lebih berguna untuk tujuan teoretis, kadang-kadang solusi deterministik tidak sejelas definisi (atau mengatakan pernyataan masalah) dan sedikit sulit untuk menemukan solusi. Kemudian satu pendekatan adalah bahwa pertama merancang model non-deterministik yang mungkin relatif mudah untuk dirancang dan kemudian mencoba mengubahnya menjadi model deterministik. Di bawah, saya telah mencoba menunjukkan apa yang saya maksud dengan contoh. Pertimbangkan ekspresi reguler:
(01)*01(0 + 1)*
Sekarang anggaplah, jika Anda diminta untuk menggambar DFA untuk bahasa yang dihasilkan oleh RE di atas.
Dengan pengetahuan saya dalam mendesain FA, saya tahu bahwa (1) ketika sebuah *
present dalam ekspresi reguler mengindikasikan bahwa saya memerlukan loop yang sesuai dalam FA (2) operasi gabungan seperti a.b
berarti sesuatu seperti:(q0)─a→(q1)─b→(q2)
.
Jadi, pada usaha pertama saya, saya akan menggambar NFA seperti:
Berpikir ini bukan solusi deterministik tetapi terlihat FA sangat sederhana yang dapat dengan mudah dirancang menggunakan ekspresi reguler yang diberikan. Jenis analogi saya untuk menunjukkan kesamaan antara ekspresi reguler di atas dan NFA saya adalah sebagai berikut:
- Loop pada state q 0 seharusnya untuk
(01)*
01
(setelah (01)*
) memberi(q0)─0→(q1)─1→(q2)
(0 + 1)*
memberikan loop diri pada keadaan q 2 untuk label 0, 1
Menurut analogi saya, saya pikir FA yang saya gambar di atas relatif mudah untuk diambil dari RE yang diberikan. Dan untungnya di kelas automata terbatas setiap model Non-deterministik dapat dikonversi menjadi model deterministik yang setara. Kami memiliki metode algoritmik untuk mengubah NFA menjadi DFA . Jadi saya dapat dengan mudah mengkonversi NFA di atas menjadi DFA:
Bagian lain sayangnya ini tidak selalu memungkinkan untuk mengubah model non-deterministik menjadi model deterministik, misalnya kelas untuk deterministic push down automate adalah subset dari kelas deterministic push-down automate "periksa diagram venn " dan Anda tidak selalu dapat mengonversi NPDA menjadi PDA.
Biasanya ketika tidak mungkin untuk mengubah solusi non-deterministik menjadi solusi deterministik maka dengan bantuan solusi non-deterministik kami mendefinisikan solusi deterministik dalam sub-domain (atau katakanlah domain parsial) alih-alih domain lengkap. Atau kami mendefinisikan solusi dengan beberapa cara lain (misalnya pendekatan serakah) yang tentu saja tidak dapat memberi Anda solusi optimal .
Terkadang non-determinisme adalah mekanisme yang efektif untuk menggambarkan beberapa masalah / solusi rumit secara tepat dan efektif, sebagai contoh mesin non-deterministik dapat berfungsi sebagai model algoritma pencarian-dan-lacak (baca: Bagaimana proses string dalam model non-deterministik menggunakan backtrack ). Model deterministik berlawanan lebih baik mewakili solusi yang efisien, diminimalkan dan kurang redundan.
Di sini saya juga ingin mengutip dari Wikipedia Penggunaan algoritma Nondeterministic :
Dalam desain algoritma, algoritma nondeterministic sering digunakan ketika masalah diselesaikan oleh algoritma yang secara inheren memungkinkan hasil ganda (atau ketika ada hasil tunggal dengan beberapa jalur dimana hasilnya dapat ditemukan, masing-masing sama-sama lebih disukai). Yang terpenting, setiap hasil yang dihasilkan algoritma nondeterministic valid, terlepas dari pilihan mana yang dibuat algoritma saat berjalan.
Sejumlah besar masalah dapat dikonseptualisasikan melalui algoritma nondeterministic, termasuk pertanyaan yang paling tidak terselesaikan dalam teori komputasi, P vs NP.
Seperti @keshlam juga disebutkan dalam komentarnya : "Nondeterminism" dalam praktiknya digunakan untuk merujuk pada setiap ketidakpastian dalam hasil dari beberapa proses. Sebagai contoh, program bersamaan menunjukkan perilaku non-deterministik - dua eksekusi program yang sama dengan input yang sama dapat menghasilkan hasil yang berbeda (jika mekanisme kontrol konkurensi tidak diterapkan). Baca lebih lanjut tentang ini di "Kegunaan Non Determinisme" .
Saya juga menyarankan Anda untuk membaca tautan berikut:
1. Apa perbedaan antara non-determinisme dan keacakan?
2. 9.2.2 Model Nondeterministic vs. Probabilistic: (a). Nondeterministic: Saya tidak tahu apa yang akan dilakukan alam. (b). Probabilistik: Saya mengamati alam dan mengumpulkan statistik.
3. pemrograman nondeterministic