Çakışan döngüler içeren bir NFA'yı normal bir ifadeye nasıl dönüştürebilirim?


11

Doğru anlarsam, NFA normal ifadelerle aynı ifade gücüne sahiptir. Genellikle, NFA'dan eşdeğer düzenli ifadeleri okumak kolaydır: döngüleri yıldızlara, kavşaklara alternatif olarak çevirirsiniz. Ancak bu durumda ne yapmalı:

resim açıklamasını buraya girin
[ kaynak ]

Çakışan döngüler bu otomatiğin neyi kabul ettiğini görmeyi zorlaştırır (normal ifadeler açısından). Bir hile var mı?


2
Diyagramda başlangıç ​​ve nihai durumların ne olduğunu belirtmeniz iyi olur: başlangıç ​​durumuna küçük bir ok ve son durum olarak çift daire. Ayrıca, denediğiniz şeyin herhangi bir belirtisini belirtmezseniz, nerede yanlış yaptığınızı bilmek zordur.
Dave Clarke

Belki bu belge size yardımcı olabilir: Bir NFA'nın RE'ye nasıl dönüştürüleceğini açıkça açıklar.
Vor

1
Neden zor? Standart algoritmalardan birini denediniz mi? Yapabileceğiniz en iyi ansatz nedir?
Raphael

3
Soruyu (imho) bu site için ilginç ve iyi hale getirmek için düzenledim. Görüş oluşturmak için düzeltme geçmişine bakın .
Raphael

1
NFA'nızı düzenli bir ifadeye dönüştüren bir cevabım var, ancak sildim: Raphael'in cevabı size kendiniz yapmanız gereken yöntemi verir (ayrıca bir örneğe bağlantı verir), böylece istemek. Eğer hala çözümümü istiyorsan, cevabımı sileceğim.
Alex ten Brink

Yanıtlar:


5

"Okuma" yerine, bunu yapmak için birkaç kanonik yöntemden birini kullanmalısınız. Gördüğüm en güzel, otomatı çözülebilen (normal) dillerin denklem sistemi olarak ifade eden bir şey. Diğer yöntemlerden daha kısa ifadeler verdiği için özellikle güzel.

Geçen yaz öğrenciler için yöntemi açıklayan bu belgeyi yazdım . Doğrudan belirli bir dersle ilgilidir; bahsedilen referans, normal ifadelerin tipik tanımıdır. Arden Lemmasının bir kanıtı (gerekli bir sonuç) bulunur; yöntemin doğruluğu için bir eksik. Derste öğrendiğim gibi, ne yazık ki bir referansım yok.

Kısaca: Her durumu için denklemi oluşturunqi

Qi=qiaqjaQj{{ε}, qiF, else

burada bir son halin ve setidir aracı bir geçiş vardır için ile etiketlenmiş . değerini veya olarak okursanız (normal ifade tanımınıza bağlı olarak), bunun normal ifadelerin bir denklemi olduğunu görürsünüz.Fqiaqjqiqja+

Bunu çözmek ( Arden kullanarak ) , başlayarak kabul edilebilecek kelimeleri tam olarak tanımlayan her durum için tek bir düzenli ifadesi verir ; bu nedenle (eğer başlangıç ) istenen ifadedir.QiqiQ0q0

Verilen otomatlara uygulama bir egzersiz olarak bırakılır; yukarıdaki bağlantılı belgede tam bir örnek bulunmaktadır .

Ayrıca bkz burada ben de benzer bir cevap yayınlanmıştır nerede.


1
Diğer genel yöntemler için bu referans soruya bakın .
Raphael

3

Döngüsüz bir devlet zinciri olsaydı, ne yapacağını biliyor muydun?

Bu örtüşen dallanma olmadan basit bir döngü olsaydı, ne yapacağınızı biliyor musunuz?

(Cevap “hayır” ise, önce bu durumları düşünün.)

Şimdi fikir, otomayı aşamalı olarak bu kalıpları tespit edebileceğiniz bir forma sokmaktır: sonunda yeniden birleşen zincirler, döngüler ve sapma yolları (değişime yol açar). Dönüşümün her adımında, dönüştürülmüş otomatın hala aynı dili tanıdığına dikkat edin.

Bunun belirleyici olmayan bir otomat olduğunu unutmayın. Gönderdiğiniz kişi deterministik olur, ancak dönüştürdüğünüzde bu şekilde kalması gerekmez.

q2q1fq2gq3q4q2q5q4jq5gq3

q3,q4,q5q3q3(hjg)*

Hangi eyaletlerin kesin olduğunu kontrol etmeye özen gösterin. İlk başta bu konuda endişelenmemek ve büyük bir döngü yapmak, daha sonra döngü boyunca yarı yolda biten parçaları çoğaltmak yardımcı olabilir.

Bu mutlaka en verimli teknik veya en basit düzenli ifadeyi üreten teknik değildir, ancak basittir.


3

Bölünmüş q_1


Ve bu nasıl?
Raphael

1
Durum makinesini bu şekilde yeniden yazarsanız, eşdeğer normal ifadeyi okumak artık önemsizdir.
Jukka Suomela

1
Belki bunu cevap metnine eklemelisiniz. Bu her zaman işe yarar mı?
Raphael

@Raphael: Bu durumda işe yarıyor. :) Bu hilenin ardındaki genel fikir şudur: döngüleri "düzgün şekilde iç içe" yaptık. Yani, döngü yapımız yok [(])ama [()].
Jukka Suomela
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.