Gli stati sono indicati con una S e un numero, gli stati finali hanno scritto < finale> e il numero
I nodi sono rappresentati da un dizionario che come chiave ha il suo stato e come valore ha un altro dizionario, dove per ogni carattere possibile, indica un altro stato: {"S1": {"A": "S1", "B": "S2"}}.
L'algoritmo segue questi step:
-
Ordinamento sequenze
Le sequenze che sono già contenute all'inizio di un altra sequenza verranno eliminate (verranno comunque onservate per capire quali stati sono finali) -
Creazione nodi iniziali
Inizialmente vengono creati tutti i nodi necessari per la creazione, vedendo quali nodi servono se si inseriscono solo caratteri "giusti".
Ogni nodo contiene una listasequenze, che indica quali sequenze quel nodo deve riconoscere, una listaattuale, che indica quali sequenze sono state inserite fino al quel nodo, un dizionariopuntaA, dove la chiave è il carattere e il valore è a quale nodo punta.-
Per ogni sequenza S in
sequenzecontrolla se esiste già un collegamento per la prima lettera di S, se esiste allora deve soltanto aggiungere S senza la prima lettera nella listasequenzedel secondo nodo. -
Se non esiste allora controlla se esiste già un nodo dove nella sua lista
sequenzeesiste S senza la prima lettera, se esiste allora la prima lettera di S deve puntare a quel nodo, inoltre deve aggiungere adattualedel secondo nodo, ogni elemento diattualedi questo nodo + la prima lettera di S. - Se non esiste allora deve craere un nuovo nodo.
-
Per ogni sequenza S in
-
Creare tutti i collegamenti
Adesso per ogni nodo bisogna controllare se manca un carattere. Se manca un carattere allora si cerca a quale nodo bisogna collegarlo in questo modo:-
Itera per ogni sequenza in
attualee ci aggiunge il carattere mancante (creando S). -
Itera per ogni nodo e cerca quale ha una sequenza in
sequenzeche se aggiunta a S crea una sequenza da riconoscere. - Se la trova allora si collega a quel nodo.
- Se non lo trova allora leva la prima lettera di S e ricomincia dal punto 2.
-
Itera per ogni sequenza in
-
Definire nodi finali
I nodi finali sono tutti i nodi che nella loro listasequenzecontengono una sequenza da riconoscere.