Sebuah robot yang terbatas nondeterministic adalah mesin negara yang terbatas di mana tuple dipetakan ke beberapa negara. Yaitu. kita ganti biasa δ : Q × Σ → Q fungsi transisi dari DFA dengan fungsi lain Δ : Q × Σ → P ( Q ) .
Jika Anda tahu apa itu NFA, Anda mungkin ingin melewatkan bagian selanjutnya.
Definisi Resmi
NFA dijelaskan secara unik oleh
- satu set terbatas negara
- seperangkat simbol yang terbatas
- fungsi transisi
- keadaan awal
- seperangkat keadaan akhir
Mesin dimulai pada dan membaca string simbol hingga w ∈ Σ ∗ , untuk setiap simbol secara simultan akan menerapkan fungsi fungsi transisi dengan status saat ini dan menambahkan setiap set status baru ke set status saat ini.
Tantangan
Untuk tantangan ini kita akan mengabaikan untuk menyederhanakan itu, selanjutnya alfabet akan selalu menjadi (huruf kecil) huruf a untuk z dan set negara akan { 0 ... N } untuk beberapa non-negatif bilangan bulat N . Keadaan awal akan selalu 0 .
Diberi kata dan deskripsi NFA, tugas Anda adalah menentukan semua status akhir.
Contoh
Pertimbangkan string dan deskripsi berikut:
state, symbol, new-states
0, 'a', [1]
1, 'a', [0]
1, 'b', [1,2]
Mesin akan mulai pada :
- baca sebuah : status baru { 1 }
- membaca : negara-negara baru { 1 , 2 }
- baca : status baru { 0 }
- baca : status baru { 1 }
- membaca : negara-negara baru { 1 , 2 }
Jadi status akhir dan dengan demikian outputnya adalah .
Catatan: Pada langkah (2) transisi status peta ke ∅ karena deskripsi hanya menyertakan transisi ke set yang tidak kosong.
Aturan
Input akan terdiri dari string dan semacam deskripsi NFA (tanpa -transisi):
- string input akan selalu menjadi elemen
- input yang valid (tidak terbatas pada):
- daftar / array tupel / daftar
- input baris baru yang dipisahkan
- deskripsi NFA hanya akan berisi transisi dengan set yang tidak kosong sebagai hasilnya
- Anda dapat menyingkat aturan dengan karakter yang sama jika hasilnya sama (mis. aturan
0,'a',[1,2]
dan0,'b',[1,2]
dapat disingkat0,"ab",[1,2]
- Anda dapat mengambil setiap aturan secara terpisah (mis. aturan
0,'a',[1,2]
dapat0,'a',[1]
dan0,'a',[2]
)
- Anda dapat menyingkat aturan dengan karakter yang sama jika hasilnya sama (mis. aturan
- Anda dapat memilih huruf besar jika Anda mau
- Anda dapat mengambil jumlah status sebagai input
- Anda dapat mengasumsikan semacam pemesanan input (mis. dipesan oleh negara atau simbol)
Output akan berupa daftar / set / output baris baru dll. Dari status akhir
- pesanan tidak masalah
- tidak ada duplikat (karena set)
Uji kasus
Contoh-contoh ini akan berada dalam format di description word -> states
mana description
ada daftar tupel (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]