DFA'nın NFA'dan daha verimli olduğunu söyleyebilir miyiz?


13

Az önce hesaplama teorisi hakkında okumaya başladım. Hangisinin daha güçlü olduğunu (dizeleri kabul ederken) karşılaştırırsak, ikisi de aynıdır. Peki ya verimlilik? DFA, NFA ile karşılaştırıldığında hızlı olacaktır, çünkü sadece bir çıkış kenarı vardır ve belirsizlik olmayacaktır. Ancak NFA durumunda, olası tüm vakaları kontrol etmeliyiz ve bu kesinlikle zaman alır. DFA'nın NFA'dan daha verimli olduğunu söyleyebilir miyiz?

Fakat beynin diğer bir parçam da NFA'nın sadece teoride var olduğunu düşünüyor, bu yüzden verimliliğini DFA ile karşılaştıramayız.

Yanıtlar:


16

Verimli olarak nasıl tanımladığınıza bağlı olarak iki cevap vardır.

Temsilin kompaktlığı

Daha azıyla daha fazlasını anlatmak: NFA'lar daha verimlidir.

Bir DFA'yı NFA'ya dönüştürmek kolaydır ve gösterimin boyutunu artırmaz.

Bununla birlikte, en küçük DFA'nın en küçük NFA'dan katlanarak büyük olduğu düzenli diller vardır. Tipik bir örnek için sabit. k(a|b)b(a|b)kk

Hesaplama

Hızlı çalıştırma : DFA'lar daha verimlidir.

Bugün kullandığımız bilgisayarlar doğası gereği deterministiktir. Bu onları determinizm ile baş etmede kötü yapar. NFA'larla deterministik olarak başa çıkmanın iki yaygın yolu vardır: bir tarafta geri izleme, oldukça maliyetli veya aktif durumları takip etmek, yani her geçişin kat daha uzun süreceği anlamına gelir (burada , NFA'nın büyüklüğüdür) .NNN


Kompaktlık açısından, NFA'lar her zaman daha verimli değildir! Minimal DFA'nın en kompakt NFA'dan katlanarak daha büyük olduğu diller olduğu doğrudur, ancak bu dillerin tüm diller kümesindeki payı nedir?
saadtaame

2
@saadtaame Tuhaf görünebilir, ancak en katı anlamda, NFA'ların deterministik olması gerekmez. DFA'lar özel bir NFA türüdür, yani başlangıç ​​seti olarak tek tonlu NFA'lar ve geçiş fonksiyonu herhangi bir zamanda sadece bir durumun aktif olacağı şekildedir.
Khaur

2
-1 "boyutunu büyütme (potansiyel olarak çok fazla)". Bağlantılı bir liste tutarak NFA durum kümelerinin simülasyonu, NFA durumlarının sayısında en fazla maliyet alanı oluşturur . Öte yandan, eşdeğer DFA'nın O ( 2 N ) durumu olabilir. O(N)O(2N)
Gezici Mantık

@WanderingLogic Haklısınız, dönüşümün açık olması gerekmiyor (hala eşdeğer DFA'yı kullanıyorsunuz, sadece kapsamlı biçimde değil). Bununla birlikte, ana nokta hala aynıdır , çünkü bu aynı boyutta bir DFA çalıştırmaktan kat daha fazla hesaplama süresi gerektirir . Bunu açıklamak için son paragrafı düzeltirim. O(N)
Khaur

Bu cevap için teşekkürler, çünkü araştırmamda NFA'ların değerlendirme için daha iyi olduğunu ve şimdi noktanın daha ince olduğunu görüyorum. Genel olarak, NFA'lar sabit bir dil için kesinlikle daha iyidir, çünkü herhangi bir akıllı NFA değerlendirme algoritması, NFA'nın bir DFA olması ve NFA'nın daha özlü olabileceği özel durumlarda DFA değerlendirme karmaşıklığıyla eşleşecektir. Bununla birlikte, seçim oldukça belirsiz bir NFA üretmek veya bunun yerine aynı boyutta bir DFA elde etmek için akıllı bir yol bulmak arasındaysa, belirli bir uygulama için DFA daha iyidir.
6005

4

Güç açısından, söylediğiniz gibi eşdeğerdir ve bir NFA'yı eşdeğer bir DFA'ya dönüştürmek için bir algoritma (alt küme yapısı) vardır. Algoritmanın adından da anlaşılacağı gibi, NFA durumlarının alt kümelerini oluşturur. NFA'nızın durumu varsa, algoritma 2 n durumlu bir DFA çıktısı verebilir, ancak bu bir üst sınırdır. Bazen, devletlerin sayısı hiç değişmez, hatta azalır. Yani pratikte, hangisinin kullanılacağı konusunda daha az önemlidir.n2n

DFA eşleşmesi, giriş dizesinin boyutunda doğrusaldır. NFA eşleşmesi geri izlemeyi içerir, böylece NFA'lar daha fazla iş yapar. Böylece, DFA'lar daha verimlidir.


Ancak DFA'nın daha verimli olduğunu söyleyebilir miyiz?
avi

1
@avi Soruyu düzenledim! Ve bu arada, NFA'lar
saadtaame

@avi Buradaki sorun, NFA'ya eşdeğer olan DFA'nın (genellikle) çok daha büyük olmasıdır. Bu nedenle, DFA'yı daha hızlı kontrol edebilmenize rağmen, genellikle daha büyük bir DFA'yı kontrol etmeniz gerekir.
Peter

@Peter, DFA'nın daha büyük olması önemli değil: Sadece geçiş işlevini veren dizinin daha büyük olduğu anlamına gelir.
vonbrand

1
@Khaur, doğru. Ancak bu tür bir sorunla karşılaşırsanız, komik bir DFA'nız var.
vonbrand

2

Yukarıdaki cevaplara eklemeniz yeterli:

NFA'lar , paralel bir işlemcide simüle edilebilecekleri anlamıyla DFA'lardan hesaplamalı olarak daha verimli olabilir.

BTW: İnsanların NFA'ların gerçekte var olamayacağını söylediğini görüyorum. Naçizane size katılmıyorum. Çok sayıda işlemciye sahip bir bilgisayar, birçok görevi paralel olarak çalıştırabilir ve belirsiz bir makine olarak düşünülebilir. Her hesaplama dalını yeni bir işlemciye atayabilir ve biri kabul ettiğinde hepsini durdurabilir.


1
Ne DFA'lar ne de NFA'lar gerçekte mevcut değildir, ikisi de sadece matematiksel ilişkilerdir ve her ikisi de algoritmalarla simüle edilebilir.
jmite

1

ϵ


ϵ

1
ϵ

ancak DFA'da ϵ-geçişleri bulunmuyor mu?
avi

@avi, evet. Orada net değilse cevabı düzenlemekten çekinmeyin.
vonbrand

hayır, sana soruyorum. Ben de bu konuda emin değilim
avi

1

Diğerlerinin de belirttiği gibi, "verimlilik" in ne anlama geldiğini tanımlamanız gerekir. Bunu açıklamak için farklı bir cevabı olan makul bir model veriyorum.

Sadece otomat modellerine bakıldığında , özellikle onları gerçek makinelere nasıl uygulayacağınızı görmezden gelen, belirgin verimlilik ölçüsü "(en kısa) kabul eden bir çalışmada alınan geçişlerin sayısı" dır.

ε


1

Teknik olarak bir NFA konuşması, belirsizliğin kullanılmasına gerek olmadığı için DFA'dan daha genel bir kavramdır. Başka bir deyişle: her DFA bir NFA'dır. Bu açıdan bakıldığında, her dil için, tercih ettiğiniz verimlilik ölçüsü için en azından en verimli DFA kadar verimli bir NFA vardır.

Bunun dışında Raphael ile verim ve uygulama ile ne demek istediğinize çok bağlı olduğuna katılıyorum .


-4

Automata hakkında bildiğimiz gibi, herhangi bir insan gücü olmadan veya doğrudan insan katılımı olmadan herhangi bir eylem gerçekleştirebilen makine örneğin: çamaşır makinesi. Sonlu Otomata, 1 basın AÇIK 2 gibi KAPALI gibi makine ile görev yapmanın sonunu bildiğimiz anlamına gelir, bu nedenle sonlu otomata adı verilen sadece 2 durum vardır. Şimdi DFA'ya gelelim yani deterministik Sonlu otomata. resmi olarak belirsizlik olmadığını ve gayri resmi olarak 1 sembolünde sadece 1 geçişe izin verilmesi gerektiğini kolayca belirleyebileceğimiz anlamına gelir. NFA: deterministik olmayan sonlu otomata. gerçek durumu hesaplamak için daha fazla zamana ihtiyaç vardır ve belirsizlik vardır ve gayri resmi olarak 1 sembolünde izin verilen çoklu geçiş olduğunu söyler. hedefe ulaşmak için zaman olması durumunda, NFA DFA'dan daha fazla zaman alır, ancak NFA DFA'dan daha fazla veri yükleyebilir. * DFA ve NFA dizeyi tanıma gücüne sahiptir. teşekkür ederim .. Deepali kaushik


1
Sonlu otomataların çamaşır makineleriyle hiçbir ilgisi yoktur.
David Richerby

2
@DavidRicherby. Belki de "hiçbir şey" ifadesi biraz güçlüdür. Sonuçta, bir çamaşır makinesinin durumlar arasında uygun geçişlerle hazır , yıkama , durulama ve sıkma durumlarına sahip olduğunu söyleyebiliriz . Daha iyi bir metafor ise jetonla çalışan bir soda otomatı olacaktır.
Rick Decker

1
@RickDecker Kabul etti, ancak küçük alaka düzeyini tartışmak için zaman geçirmek, Wikipedia'nın " aşırı kilo " olarak adlandırdığı şeye bir örnek olacaktır . Ve her halükarda, bahsettiğim cevabın bir kısmı, otomatları hesaplamalı cihazlar değil, kendi kendine çalışan makineler olarak tartışmak.
David Richerby

1
Bu cevabın soruya değecek bir şey kattığını düşünmüyorum. Özellikle, verimlilik ölçünüzden emin değilsiniz ve çeşitli endişeleri karıştırıyor görünüyorsunuz.
Raphael

Diğer cevaplar neredeyse söylenecek her şeyi tüketiyor ve maalesef cevabınız biraz kafa karıştırıcı.
Evil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.