Re: [C] Automi a stati finiti
Inviato: domenica 3 aprile 2016, 8:20
Sto rileggendo per bene, ma fatico un po'...
Intanto mi è venuta un'idea.
Potrei usare un'array d'appoggio lungo al massimo quanto tutti i nodi per segnare dove sono.
I campi segnati a 1 indicano la posizione dove siamo.
Usiamo il vecchio grafico .
Inizialmente parto da q0 quindi nell'array d'appoggio in 0 ho 1.
Leggo dove va q0 tramite la matrice: se mi entra un carattere 0 vado in q1 e q2.
Mi sono mosso da q0, quindi nell'array d'appoggio la posizione 0 (q0) diventa 0 mentre q1 e q2 diventano 1.
Stesso discorso se non mi posso muovere, lo stato attuale va messo a 0.
Ricomincio a scorrere l'array d'appoggio e vedo che la pos 1(q1) e 2(q2) sono a 1.
Quindi riscorro la matrice e vedo (in base al carattere) dove portano e riaggiorno l'array d'appoggio.
Potrei trovarmi nella situazione che l'array d'appoggio é tutto a 0, quindi l'NFA non porta da nessuna parte.
Userei un test (for): se tutto a zero, prima della fine scansione stringa, è rifiutato di sicuro: esci.
Se invece finisco, ciclo l'array d'appoggio. Se almeno uno dei campi corrispondenti alle uscite è a 1,
la stringa è accettata.
Per ora quello che ho pensato è questo.
Non so se può funzionare, potrebbero esserci degli inghippi sui cambi di stato che qui sulla carta non riesco a prevedere.
Però devo capire bene quello che hai scritto. Sicuramente sarà una soluzione più collaudata e snella la tua.
Le mie sono soluzioni da autodidatta che lasciano un po' il tempo che trovano
Intanto mi è venuta un'idea.
Potrei usare un'array d'appoggio lungo al massimo quanto tutti i nodi per segnare dove sono.
I campi segnati a 1 indicano la posizione dove siamo.
Usiamo il vecchio grafico .
Inizialmente parto da q0 quindi nell'array d'appoggio in 0 ho 1.
Leggo dove va q0 tramite la matrice: se mi entra un carattere 0 vado in q1 e q2.
Mi sono mosso da q0, quindi nell'array d'appoggio la posizione 0 (q0) diventa 0 mentre q1 e q2 diventano 1.
Stesso discorso se non mi posso muovere, lo stato attuale va messo a 0.
Ricomincio a scorrere l'array d'appoggio e vedo che la pos 1(q1) e 2(q2) sono a 1.
Quindi riscorro la matrice e vedo (in base al carattere) dove portano e riaggiorno l'array d'appoggio.
Potrei trovarmi nella situazione che l'array d'appoggio é tutto a 0, quindi l'NFA non porta da nessuna parte.
Userei un test (for): se tutto a zero, prima della fine scansione stringa, è rifiutato di sicuro: esci.
Se invece finisco, ciclo l'array d'appoggio. Se almeno uno dei campi corrispondenti alle uscite è a 1,
la stringa è accettata.
Per ora quello che ho pensato è questo.
Non so se può funzionare, potrebbero esserci degli inghippi sui cambi di stato che qui sulla carta non riesco a prevedere.
Però devo capire bene quello che hai scritto. Sicuramente sarà una soluzione più collaudata e snella la tua.
Le mie sono soluzioni da autodidatta che lasciano un po' il tempo che trovano
