The Knuth-Morris-Pratt Algorithm

Slides:



Advertisements
Presentazioni simili
Le forze ed i loro effetti
Advertisements

Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
Strutture dati per insiemi disgiunti
Ricorrenze Il metodo di sostituzione Il metodo iterativo
Process synchronization
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
Epto (A) LordScinawa Dimmi il tuo numero e ti dirò dove sei 1.
Dipartimento di Matematica
Informatica Generale Marzia Buscemi
Frontespizio Economia Monetaria Anno Accademico
UNIVERSITA’ DI MILANO-BICOCCA LAUREA MAGISTRALE IN BIOINFORMATICA
1 Tavolo del Patto per la crescita intelligente, sostenibile e inclusiva Il ricorso agli ammortizzatori sociali nei territori colpiti dagli eventi sismici.
DISEGNO TECNICO INDUSTRIALE
Training On Line – CONA. 2 Richiesta Da Menu: Conferimenti ad inizio anno termico > Agosto > Annuali > Nuova Richiesta Si accede alla pagina di Richiesta.
Heap binomiali.
Cammini minimi con sorgente singola
Implementazione dell algortimo di Viterbi attraverso la soluzione del problema di cammino mi- nimo tramite software specifico. Università degli studi di.
Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento.
Dipartimento di Ricerca Sociale - Università del Piemonte Orientale 1 Castelli Aperti giugno 2005 Castello di Camino (AL) IL PUBBLICO DI CASTELLI.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
Informatica di base A.A. 2003/2004 Algoritmi e programmi
File.
Algoritmo di Ford-Fulkerson
Programmazione 1 9CFU – TANTE ore
Esercizio 4 Data una stringa P di lunghezza m e definita sullalfabeto, scrivere un programma PERL per calcolare la seguente funzione: PREFIX_FUNCTION:
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Problemi e algoritmi Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Raffaella Rizzi DISCO Dipartimento di Informatica Sistemistica e Comunicazione Edificio U14 - primo piano - stanza.
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Corso di base sull’uso del software di analisi meteorologica DIGITAL ATMOSPHERE Prodotti meteo A cura di Vittorio Villasmunta Corso Digital Atmosphere.
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Scritte scritte scritte scritte scritte scritte scritte Scritte scritte Titolo.
Heap binomiali Gli heap binomiali sono strutture dati su cui si possono eseguire efficientemente le operazioni: Make(H) : crea uno heap vuoto Insert(H,
Istruzioni Iterative Nicola Fanizzi
Strutture di controllo in C -- Flow Chart --
Num / 36 Lezione 9 Numerosità del campione.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Shell: uso avanzato e script Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Analisi di Immagini e Dati Biologici
2 3 4 RISERVATEZZA INTEGRITA DISPONIBILITA 5 6.
Melfi, 1 aprile 2011 – MediaShow 1 Social Network: possibilità di uso consapevole nella didattica Uso, consapevolezza, opportunità, proposte Caterina Policaro.
1ROL - Richieste On Line Ente pubblico 5ROL - Richieste On Line.
Algoritmi di String Matching
1 Informatica Senza Computer? Chiariamoci un po le idee!!! Carlo Gaibisso Informatica senza Computer?
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
ISOIVA (LOCALE) TO ISOIVA (WEB) RIPARTIZIONE INFORMATICA UFFICIO APPLICATIVI AMMINISTRATIVI 13/04/2011 UNIVERSITÀ DEGLI STUDI DI FERRARA 1.
Elementi di Informatica di base
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
TECNOLOGIE DELLINFORMAZIONE E DELLA COMUNICAZIONE PER LE AZIENDE Materiale di supporto alla didattica.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
Calcolo Parallelo e Distribuito
Esercitazioni di Meteorologia da satellite
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come affrontare un problema… Marco D. Santambrogio – Ver. aggiornata al 18 Ottobre.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Bando di Residenza Cap Scheda ENTE 3ROL - Richieste On Line.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
A.P. cat. B - 1 Per chi vuole: Libro di testo D.P. Curtis, K. Foley, K. Sen, C. Morin Informatica di base 2° edizione Mc Graw-Hill Companies.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come affrontare un problema… Marco D. Santambrogio – Ver. aggiornata al 21 Agosto.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Costrutti iterativi Marco D. Santambrogio – Ver. aggiornata al 20 Ottobre 2014.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Transcript della presentazione:

The Knuth-Morris-Pratt Algorithm Università Ca’ Foscari di Venezia Dipartimento di Informatica Corso di Laboratorio di Linguaggi docente: Cocco Nicoletta Cappellazzo Pietro – 809652 – Rizzato Andrea – 809392 –

Introduzione al problema “Ricerca esatta” Dato un testo T (T[1…n]) di lunghezza n e un pattern P (P[1…m]) lungo m, determinare se e dove il pattern occorre nel testo 1 2 3 4 5 6 7 8 9 10 11 12 13 a b c T s = 3 P a b Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm Campi applicativi Potenziamento di applicazioni informatiche Comando “trova”, “trova e sostituisci” negli editor di testo, browser Web, … Comandi di sistema (es: grep, egrep, fgrep, … in ambiente Unix) Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm Campi applicativi Problemi legati alla bioinformatica ricostruzione delle serie lunghe di DNA dai suoi frammenti (fragment assembly); confronto di due o più stringhe di DNA per somiglianza; ricerca di modelli nuovi o mal definiti che occorrono frequentemente in DNA; ricerca dei modelli strutturali in DNA e proteina; Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Knuth-Morris-Pratt: Intuizione Idea di base: Per avere un algoritmo di ricerca più efficiente occorre separare il procedimento di ricerca in due fasi: Preprocessing: elaborazione preliminare del pattern dalla quale si ricavano informazioni che verranno utilizzate nella seconda fase Scanning: scansione veloce del testo Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Knuth-Morris-Pratt: Intuizione G A C s A G C T P q P è allineato con T, in modo tale che P[1…q] = T[s+1…s+q] La conoscenza di questi q caratteri consente di determinare immediatamente che certi spostamenti (s+1 e s+2) non sono validi Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

La funzione prefisso Dato un pattern P[1..m], la funzione prefisso per il pattern P è la funzione p:{1,..,m} →{0,..,m-1} t.c. p[i]= max{k:k<q &PK PQ} P: PQ: PK: p[q] è la lunghezza del prefisso più lungo di P che è anche un suffisso di PQ A G C T A G C i 1 2 3 4 5 6 7 P[i] A G C T p[i] A G C Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

La funzione prefisso pseudocodice Compute-Prefix-Function(P) m ← length[P] π[1] ← 0 k ← 0 for q ← 2 to m do while k>0 e P[k+1] ≠ P[q] do k ← π[k] if P[k+1] = P[q] then k ← k+1 π[q] ← k return π Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Esempio di calcolo della funzione prefisso Compute-Prefix-Function(P) Pattern P: m ← length[P] π[1] ← 0 k ← 0 for q ← 2 to m do while k>0 e P[k+1] ≠ P[q] do k ← π[k] if P[k+1] = P[q] then k ← k+1 π[q] ← k return π b a Variabili: m = 4 π[1] = 0 k = 0 q = 2 Funzione Prefisso π 1 i π[i] Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Esempio di calcolo della funzione prefisso k+1 = 1 Compute-Prefix-Function(P) m ← length[P] π[1] ← 0 k ← 0 for q ← 2 to m do while k>0 e P[k+1] ≠ P[q] do k ← π[k] if P[k+1] = P[q] then k ← k+1 π[q] ← k return π b a ? = b a q = 2 Variabili: k = 0+1 = 1 q = 2 Funzione Prefisso π 1 2 i π[i] Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Esempio di calcolo della funzione prefisso k+1 = 2 Compute-Prefix-Function(P) m ← length[P] π[1] ← 0 k ← 0 for q ← 2 to m do while k>0 e P[k+1] ≠ P[q] do k ← π[k] if P[k+1] = P[q] then k ← k+1 π[q] ← k return π b a ? = b a q = 3 Variabili: k = 1+1 = 2 q = 3 Funzione Prefisso π 1 2 3 i π[i] Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Esempio di calcolo della funzione prefisso k+1 = 3 Compute-Prefix-Function(P) m ← length[P] π[1] ← 0 k ← 0 for q ← 2 to m do while k>0 e P[k+1] ≠ P[q] do k ← π[k] if P[k+1] = P[q] then k ← k+1 π[q] ← k return π b a ? = b a q = 4 P[3] ≠P[4] → Entro nel while Funzione Prefisso π 1 2 3 i π[i] Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Esempio di calcolo della funzione prefisso k+1 = 2 Compute-Prefix-Function(P) m ← length[P] π[1] ← 0 k ← 0 for q ← 2 to m do while k>0 e P[k+1] ≠ P[q] do k ← π[k] if P[k+1] = P[q] then k ← k+1 π[q] ← k return π b a ? = b a q = 4 Percorro il pattern all’indietro fino a trovare il primo spostamento valido Funzione Prefisso π 1 2 3 i π[i] Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Esempio di calcolo della funzione prefisso k+1 = 1 Compute-Prefix-Function(P) m ← length[P] π[1] ← 0 k ← 0 for q ← 2 to m do while k>0 e P[k+1] ≠ P[q] do k ← π[k] if P[k+1] = P[q] then k ← k+1 π[q] ← k return π b a ? = b a q = 4 Sono tornato all’inizio: l’unico spostamento valido è 0 Funzione Prefisso π 1 2 3 4 i π[i] Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Analisi del tempo computazionale Compute-Prefix-Function(P) m ← length[P] π[1] ← 0 k ← 0 for q ← 2 to m do while k>0 e P[k+1] ≠ P[q] do k ← π[k] if P[k+1] = P[q] then k ← k+1 π[q] ← k return π O(m) } O(1) Il costo del ciclo for (linea 4) è O(m) Il valore della funzione potenziale dipende da k La linea 6 decrementa il valore di k perché π[k]<k La linea 8 incrementa il di k al più di 1 Il costo ammortizzato delle linee 5-9 è quindi 1 Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm Analisi del codice Compute-Prefix-Function(P) m ← length[P] π[1] ← 0 k ← 0 for q ← 2 to m do while k>0 e P[k+1] ≠ P[q] do k ← π[k] if P[k+1] = P[q] then k ← k+1 π[q] ← k return π k rappresenta uno spostamento valido Il caso base (π[1] = 0) è garantito dalle linee 2-3 Il valore di k all’inizio di ogni iterazione del ciclo for è uguale a π[q-1] Tale condizione rimane vera nelle successive iterazioni grazie alle linea 9 Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm Analisi del codice Compute-Prefix-Function(P) m ← length[P] π[1] ← 0 k ← 0 for q ← 2 to m do while k>0 e P[k+1] ≠ P[q] do k ← π[k] if P[k+1] = P[q] then k ← k+1 π[q] ← k return π Le linee 5-8 fanno sì che k diventi il valore corretto di π[q] Il ciclo alle linee 5-6 cerca tra tutti gli spostamenti calcolati in π uno per cui P[k+1] = P[q] A questo punto k è lo spostamento cercato Se un tale valore non viene trovato, k=0 alle linee 7-9 e a π[q] è assegnato 0 Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Sfruttando la funzione di prefisso si può definire un algoritmo con queste caratteristiche: Legge il testo un carattere alla volta senza ritornare indietro Il pattern non viene sempre riletto dall’inizio Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Pseudocodice KMP-Matcher(T,P) nlenght[T] mlenght[P] p COMPUTE-PREFIX-FUNCTION(P) q0 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “Il pattern appare con spostamento” i-m qp[q] Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Esempio di applicazione KMP-Matcher(T,P) nlenght[T] mlenght[P] p COMPUTE-PREFIX-FUNCTION(P) q0 1 2 3 4 5 6 7 8 9 Testo = Pattern = b a b a 1 2 3 4 Variabili: n=9 m=4 p=[0,1,2,0] q=0 Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Esempio di applicazione 1 2 3 4 5 6 7 8 9 Testo = Pattern = b a b a 1 2 3 4 Variabili: n=9 m=4 p=[0,1,2,0] q=0  1 i=1 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Esempio di applicazione 1 2 3 4 5 6 7 8 9 Testo = Pattern = b a b a 1 2 3 4 Variabili: n=9 m=4 p=[0,1,2,0] q=1  2 i=2 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Esempio di applicazione 1 2 3 4 5 6 7 8 9 Testo = Pattern = b a b a 1 2 3 4 Variabili: n=9 m=4 p=[0,1,2,0] q=2  3 i=3 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Esempio di applicazione 1 2 3 4 5 6 7 8 9 Testo = Pattern = b a b a 1 2 3 4 Variabili: n=9 m=4 p=[0,1,2,0] q=3  4 i=4 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Esempio di applicazione 1 2 3 4 5 6 7 8 9 Testo = Pattern = b a Variabili: n=9 m=4 p=[0,1,2,0] q=4 i=4 b a 1 2 3 4 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Output Il pattern appare con spostamento 0 Aggiornamento di q q = p[4] = 0 Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Esempio di applicazione 1 2 3 4 5 6 7 8 9 Testo = Pattern = b a Variabili: n=9 m=4 p=[0,1,2,0] q=0  1 i=5 b a 1 2 3 4 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Output Il pattern appare con spostamento 0 Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Esempio di applicazione 1 2 3 4 5 6 7 8 9 Testo = Pattern = b a Variabili: n=9 m=4 p=[0,1,2,0] q=1  2 i=6 b a 1 2 3 4 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Output Il pattern appare con spostamento 0 Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Esempio di applicazione 1 2 3 4 5 6 7 8 9 Testo = Pattern = b a Variabili: n=9 m=4 p=[0,1,2,0] q=2  3 i=7 b a 1 2 3 4 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Output Il pattern appare con spostamento 0 Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Esempio di applicazione 1 2 3 4 5 6 7 8 9 Testo = Pattern = b a Variabili: n=9 m=4 p=[0,1,2,0] q=3  p[3]  2 i=8 b a 1 2 3 4 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Output Il pattern appare con spostamento 0 Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Esempio di applicazione 1 2 3 4 5 6 7 8 9 Testo = Pattern = b a Variabili: n=9 m=4 p=[0,1,2,0] q=2  3 i=8 b a 1 2 3 4 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Output Il pattern appare con spostamento 0 Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Esempio di applicazione 1 2 3 4 5 6 7 8 9 Testo = Pattern = b a Variabili: n=9 m=4 p=[0,1,2,0] q=3  4 i=9 b a 1 2 3 4 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Output Il pattern appare con spostamento 0 Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Esempio di applicazione 1 2 3 4 5 6 7 8 9 Testo = Pattern = b a Variabili: n=9 m=4 p=[0,1,2,0] q=4 i=9 b a 1 2 3 4 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Output Il pattern appare con spostamento 0 Il pattern appare con spostamento 5 Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Analisi della complessità computazionale KMP-Matcher(T,P) nlenght[T] mlenght[P] pCOMPUTE-PREFIX-FUNCTION(P) q0 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] La chiamata alla funzione esterna COMPUTE-PREFIX-FUNCTION ha un costo O(m) come visto in precedenza. Il costo del ciclo for (linea 5) è O(n), lineare rispetto alla lunghezza del testo. O(m) O(n) Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Analisi della complessità computazionale KMP-Matcher(T,P) nlenght[T] mlenght[P] pCOMPUTE-PREFIX-FUNCTION(P) q0 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Il costo ammortizzato delle linee 6-12 è Il tempo effettivo di esecuzione di KMP-Matcher è O(n+m) O(m) O(n) } O(1) Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Analisi del codice (linea 5)Il ciclo for garantisce che la ricerca avviene in modo lineare (confrontando ogni elemento del testo). (linee 6,7)In caso di mismatch si ritorna indietro fino a trovare un prefisso valido (dato dalla funzione prefisso), oppure fino all’inizio del pattern. KMP-Matcher(T,P) nlenght[T] mlenght[P] p COMPUTE-PREFIX-FUNCTION(P) q0 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Algoritmo Knuth-Morris-Pratt Analisi del codice (linee 8,9)Se i caratteri selezionati nel pattern P e nel testo T sono uguali, garantiscono l’avanzamento del carattere controllato nel pattern. (linea 12)Necessaria per rilevare correttamente le occorrenze di P in T successive alla prima. KMP-Matcher(T,P) nlenght[T] mlenght[P] p COMPUTE-PREFIX-FUNCTION(P) q0 for i1 to n do while q>0 e P[q+1]≠T[i] do qp[q] if P[q+1]=T[i] then qq+1 if q=m then stampa “…” i-m qp[q] Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Confronto con altri algoritmi Naive (O((n-m+1)m)), soddisfacente se: si vuole trovare solo la prima occorrenza di un pattern e questa ha buona probabilità di trovarsi all’inizio del testo. Se si cercano pattern al più di 3-4 caratteri (improbabile per pattern di DNA). Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Knuth-Morris-Pratt VS Boyer-Moore KMP:(O(n+m)) complessità sempre lineare adatto a testi con sequenze ripetitive efficiente con pattern corti BM: In media sub-lineare Problemi con stringhe ripetitive Caso peggiore O(n2) In pratica è il più veloce per la maggior parte delle applicazioni Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm Bibliografia T.H. Cormen, C.E. Leiserson, R.L. Rivest, Introduzione agli algoritmi, Jackson Libri, seconda edizione. pp. 805-833 cap. 34. D. E. Knuth, J. H. Morris and V. R. Pratt. Fast Pattern Matching in Strings. SIAM Jrnl. Comput. 6(2) p323-350 Jun 1997. M. Régnier Knuth-Morris-Pratt alghorithm: an analysis. INRIA , Jan 1989. Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm Bibliografia R. Grossi Algoritmi per internet e Web: Ricerca e indicizzazione di testi. Università degli studi di pisa, 2003. C. Charras, T. Lecroq Handbook of Exact String Matching Algoritms. A.V. Aho, Algorithms for finding patterns in strings. in Handbook of Theoretical Computer Science, Volume A, Algorithms and complexity, J. van Leeuwen ed., Chapter 5, pp 255-300, Elsevier, Amsterdam. 1990. Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm

Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm Link utili http://www-igm.univ-mlv.fr/~lecroq/string/index.html http://www.ics.uci.edu/~eppstein/161/960227.html http://www.med.yale.edu/bcmm/Informatics/Jan20/KMP.htm Cappellazzo Pietro, Rizzato Andrea - The Knuth Morris Pratt Algorithm