Bisakah kita mengatakan DFA lebih efisien daripada NFA?


13

Saya baru saja mulai membaca tentang teori perhitungan. Jika kita membandingkan mana yang lebih kuat (dalam menerima string), keduanya sama. Tetapi bagaimana dengan efisiensi? DFA akan lebih cepat dibandingkan dengan NFA, karena hanya memiliki satu tepi keluar & tidak akan ada ambiguitas. Tetapi dalam kasus NFA kita harus memeriksa semua kasus yang mungkin & itu pasti membutuhkan waktu. Jadi bisakah kita mengatakan DFA lebih efisien daripada NFA?

Tapi, bagian otak saya yang lain juga berpikir bahwa NFA hanya ada dalam teori, jadi kita tidak bisa membandingkan efisiensinya dengan DFA.

Jawaban:


16

Ada dua jawaban, tergantung pada bagaimana Anda mendefinisikan efisien.

Kekompakan representasi

Memberitahu lebih banyak dengan lebih sedikit : NFA lebih efisien.

Mengubah DFA ke NFA adalah mudah dan tidak meningkatkan ukuran representasi.

Namun, ada bahasa reguler yang DFA terkecil secara eksponensial lebih besar daripada NFA terkecil. Contoh tipikal adalah untuk k diperbaiki.(a|b)b(a|b)kk

Komputasi

Menjalankannya dengan cepat : DFA lebih efisien.

Komputer yang kita gunakan saat ini bersifat deterministik. Itu membuat mereka buruk dalam berurusan dengan non-determinisme. Ada dua cara umum untuk berurusan secara deterministik dengan NFA: mundur di satu sisi, yang agak mahal, atau melacak keadaan aktif, yang berarti setiap transisi akan memakan waktu hingga kali lebih lama (di mana N adalah ukuran NFA) .NN


Mengenai kekompakan, NFA tidak selalu lebih efisien! Memang benar bahwa ada bahasa di mana DFA minimal secara eksponensial lebih besar daripada NFA yang paling ringkas, tetapi apa bagian dari bahasa-bahasa tersebut dalam himpunan semua bahasa?
saadtaame

2
@saadtaame Kelihatannya aneh, tetapi dalam arti yang paling ketat, NFA tidak harus non-deterministik. DFA adalah jenis khusus NFA, yaitu NFA dengan singleton sebagai set awal dan fungsi transisi sedemikian rupa sehingga hanya satu negara yang aktif pada waktu tertentu.
Khaur

2
HAI(N)HAI(2N)

HAI(N)

Terima kasih atas jawaban ini, karena dalam penelitian saya berpendapat bahwa NFA lebih baik untuk evaluasi dan sekarang saya mengerti bahwa intinya lebih halus. Secara keseluruhan, NFA jelas lebih baik untuk bahasa tetap, karena setiap algoritma evaluasi NFA yang cerdas akan cocok dengan kompleksitas evaluasi DFA dalam kasus khusus bahwa NFA adalah DFA, dan karena NFA mungkin lebih ringkas. Namun, jika pilihannya adalah antara memproduksi NFA yang sangat non-deterministik atau mencari cara pintar untuk mendapatkan DFA dengan ukuran yang sama , untuk beberapa aplikasi tertentu, DFA lebih baik.
6005

4

n2n

Pencocokan DFA adalah linier dalam ukuran string input. Pencocokan NFA melibatkan backtracking sehingga NFA melakukan lebih banyak pekerjaan. Dengan demikian, DFA lebih efisien.


Tetapi dapatkah kita mengatakan DFA lebih efisien?
avi

1
@ Iavi saya mengedit pertanyaan! Omong
regexp

@ Iavi Masalahnya di sini adalah bahwa DFA yang setara dengan NFA akan (sering) jauh lebih besar. Jadi, meskipun Anda dapat memeriksa DFA lebih cepat, Anda biasanya harus memeriksa DFA yang lebih besar.
Peter

@ Peter, bahwa DFA lebih besar tidak masalah: Itu hanya berarti bahwa array yang memberikan fungsi transisi lebih besar.
vonbrand

1
@ Khur, benar. Tapi jika Anda masuk ke dalam bahwa jenis masalah, Anda memiliki DFA humongous.
vonbrand

2

Hanya menambahkan jawaban di atas:

NFA dapat secara komputasi lebih efisien daripada DFA, dalam arti bahwa mereka dapat disimulasikan pada prosesor paralel.

BTW: Saya melihat orang-orang mengatakan bahwa NFA tidak bisa ada dalam kenyataan. Saya mohon untuk berbeda. Komputer dengan sejumlah besar prosesor dapat menjalankan banyak tugas secara paralel dan dapat dianggap sebagai mesin non-deterministik. Satu dapat menetapkan masing-masing cabang perhitungan ke prosesor baru dan menghentikan mereka semua setiap kali salah satu dari mereka menerima.


1
Baik DFA maupun NFA tidak ada dalam kenyataan, keduanya hanya hubungan matematis, dan keduanya dapat disimulasikan oleh algoritma.
jmite

1

Jika Anda menggunakan ukuran "jumlah langkah untuk menerima / menolak" murni teoritis , DFA akan selalu lebih murah daripada NFA yang menggunakanϵ


ϵ

1
ϵ

tetapi bukankah DFA bebas dari transisi ϵ?
avi

@avi, ya. Jangan ragu untuk mengedit jawabannya jika tidak jelas di sana.
vonbrand

tidak, aku bertanya padamu. Saya juga tidak yakin tentang hal itu
avi

1

Seperti yang telah dicatat orang lain, Anda harus mendefinisikan apa arti "efisiensi". Untuk menggambarkan hal ini, saya memberikan model yang masuk akal dengan jawaban yang berbeda.

Mencari hanya pada model otomat (s), yang mengabaikan khususnya bagaimana Anda akan mengimplementasikannya pada mesin nyata, ukuran efisiensi yang jelas adalah "jumlah transisi yang diambil pada menjalankan penerimaan (terpendek)".

ε


1

Secara teknis berbicara NFA adalah konsep yang lebih umum daripada DFA, karena tidak diperlukan untuk menggunakan nondeterminisme. Dengan kata lain: setiap DFA adalah NFA. Dari perspektif ini ada untuk setiap bahasa sebuah NFA yang setidaknya seefisien DFA paling efisien, untuk ukuran efisiensi apa pun yang Anda sukai.

Selain itu saya setuju dengan Raphael bahwa itu sangat tergantung pada apa yang Anda maksud dengan efisiensi dan implementasi.


-4

Seperti yang kita ketahui tentang Automata yaitu mesin yang dapat melakukan tindakan apa pun tanpa tenaga manusia atau tanpa partisipasi langsung manusia. misalnya: mesin cuci. Finite Automata berarti kita tahu tugas melakukan tugas dengan mesin seperti 1 tekan ON 2 tekan OFF sehingga hanya ada 2 negara yaitu disebut automata terbatas. Sekarang datang ke DFA yaitu Finite automata deterministik. secara formal berarti kita dapat dengan mudah menentukan keadaan tidak ada ambiguitas dan secara informal hanya perlu 1 transisi yang diizinkan pada 1 simbol. NFA: automata terbatas non deterministik. ada perlu lebih banyak waktu untuk menghitung keadaan aktual dan ada ambiguitas dan secara informal mengatakan ada beberapa transisi yang diizinkan pada 1 simbol. dalam hal waktu untuk mencapai tujuan, NFA membutuhkan lebih banyak waktu daripada DFA tetapi NFA dapat memuat lebih banyak data daripada DFA. * DFA dan NFA memiliki kekuatan yang sama untuk mengenali string. terima kasih .. Deepali kaushik


1
Automata terbatas tidak ada hubungannya dengan mesin cuci.
David Richerby

2
@ DavidRicherby. Mungkin ungkapan "tidak ada apa pun" agak kuat. Lagi pula, kita dapat mengatakan mesin cuci memiliki status siap , cuci , bilas , dan berputar dengan transisi yang sesuai antar negara. Namun, metafora yang lebih baik adalah mesin penjual minuman soda yang dioperasikan dengan koin.
Rick Decker

1
@RickDecker Setuju tetapi menghabiskan waktu membahas relevansi kecil akan menjadi contoh dari apa yang disebut Wikipedia " berat yang tidak semestinya ". Dan, dalam hal apa pun, bagian dari jawaban yang saya bicarakan adalah membahas automata sebagai mesin mandiri, bukan perangkat komputasi.
David Richerby

1
Saya tidak berpikir jawaban ini menambah sesuatu yang bermanfaat untuk pertanyaan ini. Secara khusus, Anda tidak jelas tentang ukuran efisiensi Anda dan tampaknya mencampur beberapa masalah.
Raphael

Jawaban lain hampir menguras segalanya untuk dikatakan dan sayangnya jawaban Anda sedikit membingungkan.
Evil
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.