Otomat adalah model abstrak dari komputer digital. Komputer digital sepenuhnya deterministik; status mereka kapan saja dapat diprediksi secara unik dari input dan kondisi awal.
Ketika kita mencoba memodelkan sistem nyata, mengapa memasukkan nondeterminisme dalam teori Automata?
Jawaban:
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:
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 sepertia.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:
(01)*
01
(setelah(01)*
) memberi(q0)─0→(q1)─1→(q2)
(0 + 1)*
memberikan loop diri pada keadaan q 2 untuk label 0, 1Menurut 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 :
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
sumber
Ini lebih sebaliknya: automata muncul lebih dulu, sebagai model matematika. Dan nondeterminisme cukup alami, Anda sering memiliki beberapa jalur terbuka sebelum Anda. Alih-alih cara berantakan menentukan bahwa semua jalur harus diikuti sampai akhir dalam urutan tertentu, dan mungkin terjebak oleh cabang-cabang yang tak terbatas, dan ... hanya menggunakan nondeterminisme.
Dan sementara bahasa pemrograman nondeterministik bukan arus utama, mereka memiliki sejarah yang termasyhur, mungkin dimulai dengan GCL Dijkstra . Ketika mesin semakin banyak core (prosesor independen), beberapa bentuk nondeterminisme merembes ke semua pemrograman.
sumber
NFA mungkin digunakan dalam praktik, periksa jawaban ini di stackexchange. Alasannya adalah bahwa konstruksi powerset dapat disimulasikan secara langsung. Untuk mensimulasikan NFA pada komputer deterministik, kami hanya melacak kemungkinan bahwa NFA bisa masuk. Biasanya, jumlah ini akan kecil, sehingga simulasi akan cepat. Ini jauh lebih praktis daripada menjalankan konstruksi powerset yang sebenarnya: otomat yang dihasilkan bisa sangat besar, meskipun dalam praktiknya sebagian besar set jarang akan tercapai.
Nondeterminisme juga penting untuk kompleksitas komputasi, di mana ia digunakan untuk mendefinisikan NP kelas. (Kelas NP juga memiliki definisi lain yang setara, misalnya menggunakan saksi.)
sumber
Anda menyatakan dengan benar bahwa automata adalah model, jadi ada dua bagian penggunaan yang tidak dapat ditentukan:
Gunakan dalam pemodelan masalah nyata.
Tidak semua automata sama kuatnya jika Anda menghapus nondeterminisme, misalnya pushdown automata (CFL≠ DCFL). Jadi, sementara kita harus mensimulasikan NPDA secara deterministik pada akhirnya, yaitu ketika kita benar-benar mengimplementasikan parser, kita perlu sebagai model untuk beberapa bahasa.
Selain itu, automata non-deterministik dapat memberikan representasi bahasa yang lebih kompak. Sebagai contoh, sudah diketahui bahwa ada NFA yang minimal DFA-nya setara secara eksponensial lebih besar.
Gunakan secara teori.
Menggunakan non-determinisme dapat menyederhanakan bukti, lihat misalnya mengubah ekspresi reguler menjadi automata terbatas.
sumber
(Ini adalah penulisan ulang dari beberapa jawaban lain tetapi saya tetap akan mempostingnya :)
Anda menulis: Otomat adalah model abstrak dari komputer digital.
Saya tidak setuju! Automata memodelkan bagaimana kita manusia menentukan komputasi, bukan hanya bagaimana komputer menjalankannya. Ketidakpastian adalah perbedaannya. Spesifikasi kami sering tidak deterministik.
Misalnya, ambil semacam penggabungan . Sortir gabungan adalah penyortiran dengan memisahkan item yang akan diurutkan menjadi dua bagian dengan ukuran yang kira-kira sama, menyortir setiap bagian menggunakan gabungan, dan menggabungkan hasil yang diurutkan. Ini benar-benar menentukan ide penggabungan, tetapi tidak deterministik: tidak menentukan urutan untuk menyortir bagian (untuk semua yang kami pedulikan, mungkin dilakukan bersamaan), juga tidak menentukan cara yang tepat untuk tentukan split. Detail tersebut perlu diisi untuk sampai pada versi deterministik, sekuensial dari gabungan yang dapat diimplementasikan oleh program komputer single-threaded, tapi saya akan mengatakan mereka adalah bagian dari cara tertentu dalam melakukan penggabungan, bukan ide menggabungkan semacam itu sendiri.
Hal yang sama berlaku untuk algoritma secara umum - misalnya resep buku resep. Beberapa orang mendefinisikan algoritma sebagai deterministik, dalam hal ini lebih umum dan menurut saya pengertian yang lebih alami tentang 'algoritma' membutuhkan nama yang berbeda.
Gagasan bekerja dengan spesifikasi nondeterministik diformalkan dengan metode pemrograman Dijkstra, yang dimulai dengan spesifikasi yang hanya memberikan pra dan pasca kondisi yang harus dipenuhi oleh program, dan secara sistematis mengembangkan program deterministik, imperatif dari mereka. Dijkstra mungkin akan mengatakan: penyortiran adalah masalahnya, hubungan antara kondisi sebelum dan sesudah kami coba bangun; menggabungkan semacamadalah pendekatan untuk melakukan itu, di suatu tempat di tengah-tengah antara spesifikasi masalah dan solusi deterministik; khusus, deterministic merge sorting algorithm adalah solusi deterministik yang konkret. Tetapi pendekatan umum yang sama dapat digunakan untuk mengembangkan program bersamaan, di mana program akhirnya masih nondeterministik. Program semacam itu misalnya dapat dijalankan dalam lingkungan komputasi terdistribusi.
sumber
Anda benar, kami TIDAK dapat membangun mesin nondeterministic. Karena itu, tujuannya bukan menggunakan konsep untuk membangun mesin yang lebih baik. Sebaliknya, nondeterminisme adalah konsep yang berguna ketika mencoba memahami perhitungan. Sebagai contoh, kita sekarang tahu bahwa, dari perspektif komputabilitas, nondeterminisme bukanlah sesuatu yang lebih kuat daripada determinisme, yang berarti bahwa kita dapat mensimulasikan mesin nondeterministic dengan menggunakan yang deterministik. Namun, dari perspektif kompleksitas, nondeterminisme memungkinkan kita, misalnya, untuk bernalar dan mencoba memahami hubungan di antara kesulitan menemukan solusi yang efisien untuk suatu masalah dan kesulitan memverifikasi solusi (yang merupakan masalah P versus NP yang terkenal) . Dan seterusnya. Oleh karena itu, alasan utama untuk mempelajari nondeterminisme adalah teori.
sumber
the invention of the Turing Machine was in 1936 by Turing. FSM-like models were introduced by McCulloch and Pitts, two neurophysiologists, as a model for neurobiological activity in 1943. from the Stanford CS history page:
not a CS historian, but suspect that the McCulloch-Pitts model did not include nondeterminism and the Mealy-Moore model did, in a natural generalizing/abstraction of the formal/theoretical concept. note that DFAs and NFAs have the same representational power so that if one wishes to model real systems there is a choice of either. one basic difference is that an NFA may be much smaller than an equivalent DFA (so for example there is a natural element of data/information compression). there are also natural aspects/analogs of parallelism in NFA study.
sumber
First of all I would like to say thanks to all the people who answered the question.All the answers are important and add some useful information.But as it is a tricky question to the beginners, and need sufficient time to understanding it well, I would try to summarize what I have gained from all the answers and from some books:
Sebenarnya saya memiliki kebingungan yaitu tentang mekanisme model nondeterministic. Saya selalu bertanya-tanya tentang mesin nondeterministic karena ini adalah mesin non-mekanis yang tidak ada di dunia nyata. Saya selalu membandingkan Automata dengan komputer kita sekarang yang sepenuhnya bersifat deterministik. Sebenarnya saya tidak benar memahami model nondeterministic. Sekarang saya pikir saya memahami model nonderministic dengan cukup baik: Mesin nondeterministic adalah mesin yang selalu mengikuti jalur eksekusi yang mengarah pada penerimaan string (Tanpa Backtracking). Tetapi bagaimana hal ini dapat dimungkinkan dalam kehidupan nyata? : Sangat mustahil bagi komputer saat ini untuk menjadi secerdas itu untuk memprediksi masa depan. Jadi mengapa nondeterminisme sama sekali? Jawaban dari pertanyaan ini cukup sulit. Yang saya simpulkan tentang pertanyaannya adalah: Teori Automata memang ada ketika komputer tidak ada (Teori Pertama kemudian praktis). Ini adalah subjek yang sepenuhnya teoretis dan konsep nondeterminisme datang secara intuitif. Motif subjek 'Automata Theory' bukanlah untuk berurusan dengan komputer praktis. Tetapi ketika praktis komputer datang kemudian menggunakan Teori Automata kita dapat mendefinisikan komputer praktis secara tepat: apa keterbatasan komputer saat ini. Masalah algoritmik yang sangat kompleks untuk komputer dan sangat tidak praktis (Di sini peran nondererminisme sangat krusial dimana kita dapat membedakan dua kelas kompleksitas P dan NP). Apa solusi untuk masalah tidak praktis ini yang dapat dieksekusi relatif lebih cepat. Inilah kegunaan nondeterminisme. Ini adalah subjek yang sepenuhnya teoretis dan konsep nondeterminisme datang secara intuitif. Motif subjek 'Automata Theory' bukanlah untuk berurusan dengan komputer praktis. Tetapi ketika praktis komputer datang kemudian menggunakan Teori Automata kita dapat mendefinisikan komputer praktis secara tepat: apa keterbatasan komputer saat ini. Masalah algoritmik yang sangat kompleks untuk komputer dan sangat tidak praktis (Di sini peran nondererminisme sangat krusial dimana kita dapat membedakan dua kelas kompleksitas P dan NP). Apa solusi untuk masalah tidak praktis ini yang dapat dieksekusi relatif lebih cepat. Inilah kegunaan nondeterminisme. Ini adalah subjek yang sepenuhnya teoretis dan konsep nondeterminisme datang secara intuitif. Motif subjek 'Automata Theory' bukanlah untuk berurusan dengan komputer praktis. Tetapi ketika praktis komputer datang kemudian menggunakan Teori Automata kita dapat mendefinisikan komputer praktis secara tepat: apa keterbatasan komputer saat ini. Masalah algoritmik yang sangat kompleks untuk komputer dan sangat tidak praktis (Di sini peran nondererminisme sangat krusial dimana kita dapat membedakan dua kelas kompleksitas P dan NP). Apa solusi untuk masalah tidak praktis ini yang dapat dieksekusi relatif lebih cepat. Inilah kegunaan nondeterminisme. Tetapi ketika praktis komputer datang kemudian menggunakan Teori Automata kita dapat mendefinisikan komputer praktis secara tepat: apa keterbatasan komputer saat ini. Masalah algoritmik yang sangat kompleks untuk komputer dan sangat tidak praktis (Di sini peran nondererminisme sangat krusial dimana kita dapat membedakan dua kelas kompleksitas P dan NP). Apa solusi untuk masalah tidak praktis ini yang dapat dieksekusi relatif lebih cepat. Inilah kegunaan nondeterminisme. Tetapi ketika praktis komputer datang kemudian menggunakan Teori Automata kita dapat mendefinisikan komputer praktis secara tepat: apa keterbatasan komputer saat ini. Masalah algoritmik yang sangat kompleks untuk komputer dan sangat tidak praktis (Di sini peran nondererminisme sangat krusial dimana kita dapat membedakan dua kelas kompleksitas P dan NP). Apa solusi untuk masalah tidak praktis ini yang dapat dieksekusi relatif lebih cepat. Inilah kegunaan nondeterminisme. Apa solusi untuk masalah tidak praktis ini yang dapat dieksekusi relatif lebih cepat. Inilah kegunaan nondeterminisme. Apa solusi untuk masalah tidak praktis ini yang dapat dieksekusi relatif lebih cepat. Inilah kegunaan nondeterminisme.
Harap perbaiki saya jika ada yang salah.
sumber
non-determinism is useful because it helps you understand determinism, but not the other way around. You could say non-determinism is the bigger idea. A deterministic turing machine is a special case of a non-deterministic one. - Nondeterminism can help us understand why, on todays platforms, some problems are hard to pin down. There are a number of computational problems that have no efficient solution on a deterministic computing platform, but we understand that there can be efficient solutions on nondeterministic ones. ... state, encoding, nondeterminism they are all linked http://people.cs.umass.edu/~rsnbrg/teach-eatcs.pdf
In a deterministic Turing machine, the set of rules prescribes at most one action to be performed for any given situation. A non-deterministic Turing machine(NTM), by contrast, may have a set of rules that prescribes more than one action for a given situation. http://en.wikipedia.org/wiki/Non-deterministic_Turing_machine If you can build a software box that can manage state transitions so well that it can handle more than one action you can get performance beyond deterministic machines.
sumber
Determinism has a strong tendency to break symmetries. This tendency is even stronger for sequential determinism, but the notion of an acyclic directed graph and a topological order of such a graph allows to ignore the difference between determinism and sequential determinism. Non-determinism is a superset of determinism, which allows to preserve more symmetries. When designing the solution of a problem, starting with the non-deterministic solution allows to preserve useful symmetries, and which keeps the description of the solution small and compact. The breaking of the symmetries can then be delegated to a later stage during implementation, while converting the non-deterministic solution to a deterministic solution.
Often non-determinism means that the notion of a partial function is replaced by the notion of a relation. In that case, a non-deterministic machine can run both forward and backward in time, while this is not possible in general for a deterministic machine. If we work with total functions for determinism and multivalued total functions for non-determinsim instead, the symmetry is no longer as nice, but it still can be made to work.
sumber