Bir nondeterministic FA tuple sonlu durum makinesi birden çok durum eşleştirilir. Yani. DFA'nın normal δ : Q × Σ → Q geçiş işlevini başka bir Δ : Q × Σ → P ( Q ) işleviyle değiştiriyoruz .
Bir NFA'nın ne olduğunu biliyorsanız, sonraki bölümü atlamak isteyebilirsiniz.
Resmi tanımlama
Bir NFA benzersiz bir şekilde
- sınırlı bir durum kümesi
- sonlu bir sembol seti
- geçiş fonksiyonu
- başlangıç durumu
- bir dizi son durum
Makine ile başlar ve w ∈ Σ ∗ sembollerinden oluşan sınırlı bir dizi okur , her sembol için aynı anda geçiş fonksiyonu işlevini geçerli durumla uygular ve her yeni durum kümesini geçerli durum kümesine ekler.
Meydan okuma
Bu meydan okuma için biz göz ardı eder ayrıca alfabe hep harfler (küçük harfle) olacaktır, bunu basitleştirmek için bir etmek z ve devletlerin kümesi olacak { 0 ... N } tamsayı olmayan bazı negatif için N . Başlangıç durumu her zaman 0 olur .
W ∈ { a … z } ∗ kelimesi verildi ve NFA açıklaması, görev tüm nihai durumlarını belirlemektir.
Misal
dizesini ve aşağıdaki açıklamayı göz önünde bulundurun :
state, symbol, new-states
0, 'a', [1]
1, 'a', [0]
1, 'b', [1,2]
Makine q 0 = 0 olarak başlayacak :
- Bir okuma : Yeni devletler { 1 }
- a : yeni durumlar { 1 , 2 }
- Bir okuma : Yeni devletler { 0 }
- Bir okuma : Yeni devletler { 1 }
- a : yeni durumlar { 1 , 2 }
Dolayısıyla nihai durumlar ve dolayısıyla çıktı .
Not: (2) adımında , durum eşlemelerinin ∅ , açıklama sadece boş olmayan setlere geçişleri içerdiği ya geçişi.
kurallar
Giriş, bir dize ve olmadan (NFA tarifnamenin bir tür oluşacak -transitions):
- giriş dizesi daima { a … z } ∗ öğesi olacaktır
- geçerli girdiler (bunlarla sınırlı değildir):
- liste / tuples / list dizisi
- yeni satır ayrılmış giriş
- NFA'nın açıklaması yalnızca sonuç olarak boş olmayan kümelerle geçişler içerecektir
- sonuçları aynıysa kuralları aynı karakterlerle kısaltabilirsiniz (örn. kurallar
0,'a',[1,2]
ve0,'b',[1,2]
ile kısaltılmış olabilir)0,"ab",[1,2]
- her kuralı ayrı alabilirsiniz (örn. kural
0,'a',[1,2]
olabilir0,'a',[1]
ve0,'a',[2]
)
- sonuçları aynıysa kuralları aynı karakterlerle kısaltabilirsiniz (örn. kurallar
- isterseniz büyük harfleri seçebilirsiniz
- durum sayısını girdi olarak alabilirsiniz
- girişlerin bir tür sırasını varsayabilirsiniz (örn. eyalet veya semboller tarafından sıralanmıştır)
Çıktı, son durumların bir listesi / seti / yeni satır ayrılmış çıktısı vb. Olacaktır.
- sipariş önemli değil
- yineleme yok (bir set olduğu için)
Test senaryoları
Bu örnekler , tuples listesinin description word -> states
bulunduğu formatta olacaktır :description
(state,symbol,new-states)
[] "x" -> []
[] "" -> [0]
[(0,'a',[1]),(1,'a',[0]),(1,'b',[1,2])] "abaab" -> [1,2]
[(0,'a',[1]),(1,'a',[0]),(1,'b',[1,2])] "abc" -> []
[(0,'p',[0,1]),(0,'g',[2]),(1,'c',[1]),(1,'g',[4]),(1,'p',[2]),(2,'c',[0])] "ppcg" -> [2,4]
[(0,'f',[1]),(1,'o',[1,2]),(2,'b',[3]),(3,'a',[4]),(4,'r',[0,4])] "foobar" -> [0,4]
[(0,'f',[1]),(1,'o',[1,2]),(2,'b',[3]),(3,'a',[4]),(4,'r',[0,4])] "fooooooobar" -> [0,4]
[(0,'f',[1]),(1,'o',[1,2]),(2,'b',[3]),(3,'a',[4]),(4,'r',[0,4])] "fobarfo" -> [1,2]
[(0,'f',[1]),(1,'o',[1,2]),(2,'b',[3]),(3,'a',[4]),(4,'r',[0,4])] "foobarrf" -> [1]
[(0,'d',[1,2]),(1,'u',[2]),(2,'u',[2,3]),(2,'p',[3]),(3,'p',[3])] "dup" -> [3]
[(0,'a',[0,2]),(0,'b',[3]),(1,'a',[1]),(1,'b',[1]),(2,'b',[1,4]),(4,'b',[2])] "aab" -> [3,1,4]
[(0,'a',[0,2]),(0,'b',[3]),(1,'a',[1]),(1,'b',[1]),(2,'b',[1,4]),(4,'b',[2])] "abb" -> [1,2]