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?
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?
Yanıtlar:
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.
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 ).
Ö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.
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.
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.
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 .
bu soru teorik bir sorudan ziyade uygulamalı yazılım testi ve pratikte doğruluğu doğrulama ile ilgilidir.
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.