Bana verilen çift harfler (aa, bb) veya çift harfler (aa, bb) ile biten ile başlayan tüm girdileri kabul eden bir DFA, yapma basit bir sorun var Verilen dilin alfabesi setini edilir.
Bunu dolambaçlı bir şekilde çözmeye çalıştım:
- Düzenli bir ifade oluşturma
- İlgili NFA'sını yapma
- DFA çıkarmak için güç kümesi yapısını kullanma
- DFA'daki durum sayısını en aza indirme
Adım 1: Verilen sorun için düzenli ifade (sayısız diğerleri arasında):
((aa|bb)(a|b)*)|((a|b)(a|b)*(aa|bb))
Adım 2: Verilen ifade için NFA :
(kaynak: livefilestore.com )
Tablo şeklinde, NFA:
State Input:a Input:b
->1 2,5 3,5
2 4 -
3 - 4
(4) 4 4
5 5,7 5,6
6 - 8
7 8 -
(8) - -
3. Adım: Güç kümesi yapısını kullanarak bir DFA'ya dönüştürün:
Symbol, State + Symbol, State (Input:a) + Symbol, State (Input:b)
->A, {1} | B, {2,5} | C, {3,5}
B, {2,5} | D, {4,5,7} | E, {5,6}
C, {3,5} | F, {5,7} | G, {4,5,6}
(D), {4,5,7} | H, {4,5,7,8} | G, {4,5,6}
E, {5,6} | F, {5,7} | I, {5,6,8}
F, {5,7} | J, {5,7,8} | E, {5,6}
(G), {4,5,6} | D, {4,5,7} | K, {4,5,6,8}
(H), {4,5,7,8} | H, {4,5,7,8} | G, {4,5,6}
(I), {5,6,8} | F, {5,7} | I, {5,6,8}
(J), {5,7,8} | J, {5,7,8} | E, {5,6}
(K), {4,5,6,8} + D, {4,5,7} + K, {4,5,6,8}
4. Adım: DFA'yı en aza indirin:
Önce K-> G, J-> F, I-> E'yi değiştirdim. Bir sonraki yinelemede H-> D ve E-> F. Böylece, son tablo:
State + Input:a + Input:b
->A | B | C
B | D | E
C | E | D
(D) | D | D
(E) | E | E
Ve şematik olarak şöyle görünüyor:
(kaynak: livefilestore.com )
... gerekli DFA değil! Sonuçumu üç kez kontrol ettim. Nerede yanlış yaptım?
Not:
- -> = başlangıç durumu
- () = son durum