La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

RICONOSCIMENTO DI SEQUENZE DI EVENTI

Presentazioni simili


Presentazione sul tema: "RICONOSCIMENTO DI SEQUENZE DI EVENTI"— Transcript della presentazione:

1 RICONOSCIMENTO DI SEQUENZE DI EVENTI

2 Il problema Realizzare un algoritmo per identificare in una sequenza di caratteri provenienti da un dispositivo d’input e di lunghezza non nota a priori la parola SUN, in qualunque contesto si trovi.

3 Una soluzione Il problema potrebbe essere ricondotto al riconoscimento di stringhe: si memorizza in un vettore di caratteri una parte della sequenza d’input e poi, a partire dalla prima posizione del vettore, si effettua il confronto tra una sottostringa lunga 3 caratteri e la parola di riferimento (SUN).

4 Se sono uguali si dichiara di aver trovato la parola cercata.
Si procede così di seguito, avanzando ogni volta di una posizione, finché ci sono abbastanza caratteri nel vettore. Esauriti i caratteri del vettore di supporto, se ne caricano altri dal dispositivo di input.

5 Prima però si devono trasferire in testa al vettore gli ultimi due caratteri della sequenza precedente: potrebbero infatti contenere l’inizio della parola. Si preferisce adottare un altro approccio, comune a tutti i casi in cui occorre riconoscere sequenze di eventi.

6 La macchina a stati L’idea è quella di analizzare un elemento per volta (in questo caso, un carattere per volta) e di memorizzare in una apposita variabile, denominata stato_corrente, la condizione in cui ci si trova. Si svolge l’analisi di quanto può succedere aiutandosi con un disegno (diagramma a stati o pallogramma) e con una sequenza di caratteri qualsiasi, ideata in modo da contemplare tutti i casi possibili, come la seguente:

7 “QUESTO E’ UN TESTO DI COLLAUDO, CONTIENE SUN MA ANCHE SU E SSUN E ANCORA SUSUN NONCHE’ SUNSUN, CIOE’ DUE STRINGHE SUN CONSECUTIVE”.

8 All’inizio si suppone di essere in uno stato chiamato stato_iniz, e si analizzano i caratteri uno per volta, man mano che arrivano. Fin quando si ricevono caratteri diversi da ‘S’, si resta nello stesso stato stato_iniz. Quando arriva il carattere ‘S’, si passa ad un nuovo stato chiamato stato_s.

9 ALTRI CARATTERI ‘S’ STATO_S STATO_INIZ START

10 In stato_s, si verifica se arriva il carattere ‘U’, nel qual caso si passa allo stato stato_u.
Se il carattere che arriva non è ‘U’, controllo che non sia ‘S’, nel qual caso si resta in stato_s (ci si trova in una situazione del tipo ...SSUN...). In tutti gli altri casi si è trattato di un falso allarme e si torna a stato_iniz.

11 STATO_S STATO_INIZ START ALTRI CARATTERI ‘S’ ‘S’ STATO_U ‘U’

12 In stato_u, se arriva ‘N’, si va in stato_fin, in cui si dichiara di aver riconosciuto la parola SUN; se invece arriva ‘S’, si torna in stato_s (situazione del tipo ...SUSUN...), mentre in tutti gli altri casi si torna a stato_iniz e si continua l’analisi fino all’esaurimento dei caratteri in input.

13 ALTRI CARATTERI ‘S’ ‘S’ ‘U’ ‘N’ START STATO_INIZ STATO_S STATO_U STATO_FIN ‘S’ ALTRI CARATTERI ALTRI CARATTERI

14 Se interessa riconoscere la parola SUN una sola volta, quando si raggiunge stato_fin si termina;
altrimenti si fa coincidere stato_fin con stato_iniz e si continua.

15 STATO_INIZ START ALTRI CARATTERI ‘S’ STATO_S STATO_U ‘U’ ‘N’ : PAROLA RICONOSCIUTA

16 Si considera quest’ultimo caso, in modo che l’algoritmo tratti correttamente situazioni come ...SUNSUN..., identificando due occorrenze della stringa SUN. Nella realizzazione dell’algoritmo, si utilizza il costrutto switch (o, in alcuni linguaggi, il costrutto case) in sostituzione della cascata di if necessaria per analizzare il contenuto di stato_corrente.

17 Algoritmo Pongo il valore STATO_INIZ in stato_corrente
Finché ci sono caratteri leggo un carattere in carat switch su stato_corrente caso STATO_INIZ: se carat = ‘S’ pongo il valore STATO_S in stato_corrente

18 caso STATO_S: se carat = ‘U’
pongo il valore STATO_U in stato_corrente altrimenti se carat ’S’ pongo il valore STATO_INIZ in stato_corrente

19 Fine. caso STATO_U: se carat = ‘N’ visualizzo “Parola riconosciuta”
pongo il valore STATO_INIZ in stato_corrente altrimenti se carat = ‘S’ pongo il valore STATO_S in stato_corrente Fine.


Scaricare ppt "RICONOSCIMENTO DI SEQUENZE DI EVENTI"

Presentazioni simili


Annunci Google