Bir DFA'nın bir NFA'ya eşdeğer olduğunu nasıl doğrularım?


10

NFA'ları DFA'lara nasıl dönüştüreceğimizi öğreniyorum ve doğru yaptığımdan emin olmak istiyorum. Açıkçası, diğer yöne dönmek bir şey değil. Herkes bir DFA'nın bir NFA ile eşdeğer olduğunu kontrol etmek için bir algoritma biliyor mu?


Bir aday yorumu: NFA'yı DFA'ya dönüştürme sorunu için bir "sonuç denetleyicisi" ( Wasserman ve Blum anlamında ) var mı? Başka bir deyişle, dönüşüm algoritması için iddia edilen (girdi, çıktı) bir çift verilen, dönüşümün kendisini asimptotik olarak daha hızlı olan bir algoritma var mı?
DW

Yanıtlar:


7

Bu sorunlu bir soru. Şimdi açıklayacağım otomatanın denkliğini kontrol etmenin bir yolu var, ama korkarım sonunda göreceğiniz gibi size yardımcı olmayacak.

İki kümesi, geri çağırma ve B IFF eşittir bir B ve B A (bu set eşitlik tanımıdır). Böylece, sen olduğunu doğrulamak için yeter L ( D ) L ( N ) ve L ( N ) L ( D ) , D ve N sırasıyla DFA ve NFA vardır.ABABBAL(D)L(N)L(N)L(D)DN

Ancak dillerin kontrol altına alınmasını nasıl kontrol edersiniz? Eh, şimdi gözlemlemek olduğunu iff A ¯ B = (burada ¯ B tamamlayıcısı olan B ).ABAB¯=B¯B

Önce olup olmadığını kontrol edelim . Bunu yapmak için, tamamlamak için ihtiyaç D (çok kolay - takas bir reddetme durumları kabul), sonra ile (ürün yapımı ile örneğin) kesişme Otomaton'u inşa N ve bir kabul devlete bir yol bularak, boşluk olup olmadığını kontrol edin.L(N)L(D)DN

Ancak bunun tersi, bunun size neden yardımcı olmadığını gösterecektir. Olmadığını kontrol etmek için , tamamlamanın gerekir N . Ancak bir NFA'yı tamamlamak için önce onu bir DFA'ya dönüştürmeniz ve tüm fikri anlamsız hale getirmeniz gerekir.L(D)L(N)N

Temel olarak, sorunuzla ilgili sorun çok daha derin: sizin (tanımsız bir hesaplama modeli) iyi tanımlanmış bir algoritmayı doğru bir şekilde yürüttüğünüzü doğrulamak istiyorsunuz . Yani bu aslında bir bilgisayar bilimi sorunu değil.

Bu ki: önerdi yapılar ardından, sonuca zor değildir en uzunlukta bir kelime var IFF 2 2 N ( n- durumlarının sayısı olarak N ) olduğu biri tarafından kabul edilir, diğeri tarafından kabul edilmez. Böylece tüm kelimeleri bu uzunluğa kadar deneyebilirsiniz.L(D)L(N)22nnN


İyi düşünülmüş cevap için teşekkür ederim. Bugün yeni bir şey öğrendim. Benim en iyi seçeneğim, işimi sadece JFLAP ile karşılaştırmak gibi görünüyor.
IAmOnStackExchange

2
NFA'nız büyük olmadıkça (örneğin 7-8 eyaletten fazla), en iyi seçeneğiniz muhtemelen kendinizi dikkatlice kontrol etmektir. Genellikle, erişilemeyen durumları kaldırdıktan sonra, küçük bir DFA elde edersiniz ve manuel olarak kontrol etmek çok zor değildir.
Shaull

1
Her iki makineyi de belirleyip en aza indiremez ve iki makinenin izomorfik olup olmadığını kontrol edemez misiniz?
saadtaame

5

Devam etmenin bir yolu, NFA'yı bir DFA'ya dönüştürmek ve daha sonra doğrusal bir algoritmanın olduğu iki DFA'nın denkliğini kontrol etmektir [1].

Aşağıdaki makalede, iki NFA'nın denkliği ile ilgili daha genel bir durum ele alınmaktadır (elbette sizin durumunuz için de geçerlidir).

Filippo Bonchi, Damien Pous, Uyum için Programlama Dilleri Prensibi (POPL), BMA ile NFA denkliğinin kontrol edilmesi , Ocak 2013, Roma, İtalya. ACM, s.457-468, 2013.

Özet . Deterministik olmayan sonlu otomataların dil denkliğini kanıtlama tekniği olarak uyumla bisimülasyonu tanıttık. Bu tekniği kullanarak, klasik algoritmanın Hopcroft ve Karp tarafından bir optimizasyonunu tasarladık [1]. Altta yatan iki koindüktif ispat yöntemini analiz ederek ve ilişkilendirerek, yeni tanıtılan antikalin algoritmalarına yaklaşımımızı karşılaştırıyoruz. Antiklinler üzerinde katlanarak geliştiğimiz somut örnekler veriyoruz; deneysel sonuçlar ayrıca ihmal edilemez iyileşmeler göstermektedir.

[1] JE Hopcroft ve RM Karp. Sonlu otomata denkliğini test etmek için doğrusal bir algoritma. TR 114, Cornell Üniversitesi, Aralık 1971.

Ayrıca, sonuçlara ilişkin Coq proof komut dosyalarını, bir uygulamaya bağlantıyı ve etkileşimli bir uygulamayı içeren bu makalenin web ekine bakın .


Devam etmenin bir yolu, NFA'yı bir DFA'ya dönüştürmektir , posterin amacı bu algoritmanın sonucunu doğrulamaktır. İki kez uygulamak gerçekten bir yol ama algoritmanın yanlış anlaşılmasından muaf değil. Muhtemelen bu yüzden bir kontrol yöntemi sorulmuştur.
AProgrammer

2
@aprogrammer Cevabımın ana kısmı, Coq geçirmez bir komut dosyasının mevcut olduğu bir algoritmaya yapılan bir referanstır, ki bu kesinlikle düşünebileceğim en güvenli kontrol yöntemidir.
J.-E.

1
Birinin NFA'dan DFA'ya kadar basit bir algoritmayı anlamadan emin olmadığından emin değilim, bir Coq geçirmez komut dosyasıyla yapacaktır. Bu, üçüncü bir sınıfın matematik problemini çözmek için cebir kullanmaya benziyor.
AProgrammer

0

bu soru teorik bir sorudan ziyade uygulamalı yazılım testi ve pratikte doğruluğu doğrulama ile ilgilidir.

  • D1D2¯D2D1¯D¯

  • sonuçlarınızı doğrulamak için test edilmiş, önceden test edilmiş yazılıma güvenebilirsiniz. örneğin AT&T FSM kütüphanesi

  • başka bir fikir: rastgele test. kendi dilinizde rastgele dizeler seçin. karakter dizilerinin DFA / NFA tarafından kabul edilip edilmediğini belirler. ikisi eşit değilse, yüksek olasılıkla uyumsuz dizeler bulacaksınız.

  • başka bir fikir: DFA ve NFA'nın tüm dallarını belirli bir derinliğe geçirmek için kod yazabilir ve uyuşmazlıkları arayabilirsiniz. bu, belirli uzunluklarda kabul edilen tüm potansiyel dizeleri numaralandırmaya eşdeğerdir.

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.