Slides:



Advertisements
Présentations similaires
La recherche de chemin optimal
Advertisements

La Méthode de Simplexe Standardisation
Chap. 4 Recherche en Table
Chapitre annexe. Récursivité
L-System et modélisation de plantes…
Calculs de complexité d'algorithmes
Groupe IHM Isabelle BONDOUX Cédric CASTAGNE Samy FOUILLEUX
1 UMLV Optimalité des tris par comparaisons : O(n logn) Classements linéaires Tris lexicographiques Tri lexicographique.
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
UMLV 1 Problème G = (S, A) graphe (orienté) Calculer H = (S, B) où B est la clôture réflexive et transitive de A. Note : (s,t) B ssi il existe un chemin.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Chap 1 Grammaires et dérivations.
Introduction : Compilation et Traduction
Automate asynchrone.
Expressions rationnelles
Chapitre 1 Automates finis
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
FLSI602 Génie Informatique et Réseaux
Introduction à l'informatique linguistique
IFT313 Introduction aux langages formels
Conception et analyse des algorithmes
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Introduction : Compilation et Traduction
Partie 1 Etude de l'existant
Récursivité.
Introduction à l’algorithmique
Les structures de données arborescentes
II. Chaînage, SDD séquentielles
Analyse lexicale Généralités Expressions rationnelles Automates finis
Notions de base de la théorie des langages
Programmation fonctionnelle Le langage LISP
Bases de données lexicales
FICHIERS : Définition : Algorithme général:
Algorithme de Bellman-Ford
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Révision de mi-session.
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Automates à pile LR Notion de poignée.
Expressions régulières et hash tables
Semaine #1 INF135 par Frédérick Henri.
Génération d’un segment de droite
Traduction dirigée par la syntaxe
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.


Chapitre 3 Syntaxe et sémantique.
Programmation logique Le Langage PROLOG

Rappel Modèle analyse-synthèse de la compilation
326 UMLV Méthodes de classement destinées à de grandes masses de données Applicables à des fichiers séquentiels Complexité : évaluée surtout en nombre.

Programmation linéaire en nombres entiers : les méthodes de troncature
201 UMLV  Type « dictionnaire » sous-ensembles finis de E (ordonné) avec les opérations : Ens_vide :  Ens Ajouter : Ens x Elément  Ens Enlever.
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 8 Filtres UNIX.
Expressions régulières et hash tables
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
LES PILES ET FILES.
Chapitre II Analyse Lexical.
11/04/ L'héritage Cours 7 Cours 7.
Algorithmique et programmation (1)‏
Arbres binaires et tables de hachage
Recherche exacte de motifs
Le langage Z minimal Pr ZEGOUR DJAMEL EDDINE
Le langage Racket (Lisp)
Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Recherche par automates finis
Les transducteurs En anglais transducers.
Abdelkader Heni FUNDP Syntaxe et sémantique Abdelkader Heni FUNDP
Chap 1 Grammaires et dérivations.
BASE DE L’ALGORITHMIE.  Un système d’instructions.  Pour résoudre d’un problème ou d’une classe de problèmes  Recette de cuisine pour faire un gâteau.
Transcription de la présentation:

Reconnaissance de motifs UMLV ã Reconnaissance de motifs Problème localiser les segments d'un texte décrits par une expression rationnelle (régulière) r texte t segment x décrit par r Applications édition : vi, emacs , sed, ed, ... recherche : grep, egrep , ... traduction : lex, sed , … langages : awk, perl, … compression : compress, gzip, …

unix > grep toto t.txt produit les lignes de t.txt UMLV ã GREP unix > grep toto t.txt produit les lignes de t.txt qui contiennent le mot toto Applications recherche de fichiers par le contenu contrôle du contenu d ’un fichier Versions egrep, fgrep, ...

1 génération d’un automate A( r ) 2 analyse du texte avec A( r ) UMLV ã Algorithme de base Deux phases 1 génération d’un automate A( r ) 2 analyse du texte avec A( r ) les phases peuvent être intégrées texte segments reconnus A( r ) automate équivalent r génération analyse

Expression rationnelle r Langage représenté L( r ) UMLV ã Expression / langage Expression rationnelle r Langage représenté L( r ) a, b, … {a} , {b} , … a, b  A , e  , {mot vide} [ u , v L(u) , L(v) ] (u) L(u) u + v L(u)  L(v) uv { xy | x  L(u), y  L(v) } u* { x1x2…xk | k  0, xi  L(u) } 1(0+1)*0 {écritures binaires des entiers pairs} (a*b)*a* {suites finies de a et b} (c*l)*c*f {fichiers textes}

Analyse des expressions UMLV ã Analyse des expressions Une grammaire des expressions rationnelles E  T | T ‘+’ E T  F | F T F  S G G  e | ‘*’ G S  ‘a’ | ‘b’ | ‘’ | ‘e’ | ‘(’ E ‘)’ E expression, T terme F facteur, S facteur simple (a+b)*c {suites finies de a et b terminées par c}

Analyse de (a+b)*c Arbre de l’analyse UMLV ã E T S F G ‘(’ ‘)’ ‘+’ ‘a’ ‘*’ Arbre de l’analyse Grammaire E  T | T ‘+’ E T  F | F T F  S G G  e | ‘*’ G S  ‘a’ | ‘b’ | ‘’ | ‘e’ | ‘(’ E ‘)’

Diagrammes syntaxiques UMLV ã Diagrammes syntaxiques Expression Terme Facteur Expression Terme ‘+’ Terme Facteur Expression ‘a’ ‘*’ ‘e’ ‘’ ‘b’ ‘(’ ‘)’

Algorithme d’analyse UMLV ã caractère car; /* caractère suivant, global */ Analyse(expression rationnelle r){ car  premier caractère de r ; Expression(); si(car  fin d’expression) erreur(); } Expression(){ Terme(); si(car = ‘+’){ car  caractère suivant; Terme(){ Facteur(); si(car  {‘a’, ‘b’, ‘’, ‘e’, ‘(’})

Algorithme d’analyse (suite) UMLV ã Algorithme d’analyse (suite) Facteur(){ si(car  {‘a’, ‘b’, ‘’, ‘e’}){ car  caractère suivant; }sinon si(car = ‘(’){ Expression(); si(car = ‘)’) sinon erreur(); }sinon tant que(car = ‘*’) }

Diagrammes syntaxiques (autre) UMLV ã Diagrammes syntaxiques (autre) Expression Terme Facteur Terme ‘+’ Facteur Expression ‘a’ ‘*’ ‘e’ ‘’ ‘b’ ‘(’ ‘)’

Algorithme d’analyse (autre) UMLV ã Algorithme d’analyse (autre) caractère car; /* caractère suivant, global */ Analyse(expression rationnelle r){ car  premier caractère de r ; Expression(); si(car  fin d’expression) erreur(); } Expression(){ Terme(); tant que(car = ‘+’){ car  caractère suivant; Terme(){ répéter Facteur(); tant que(car  {‘a’, ‘b’, ‘’, ‘e’, ‘(’})

A( r ) automate associé à l’expression rationnelle r sur l ’alphabet A UMLV ã Expression / automate A( r ) automate associé à l’expression rationnelle r sur l ’alphabet A Invariants de la construction A( r ) possède un seul état initial i un seul terminal t aucune flèche n’entre dans i aucune flèche ne sort de t Graphique A( r ) : i t r

Transformation Expr. rat. Aut. équiv. a e  (u) uv UMLV ã Transformation Expr. rat. Aut. équiv. a e  (u) uv Expr. rat. Aut. équiv. u + v u* a u v u u u v

A( r ) reconnaît le langage L( r ) Propriétés supplémentaires UMLV ã Automate obtenu Proposition A( r ) reconnaît le langage L( r ) Propriétés supplémentaires A( r ) possède 2.|r | états, sans compter ‘(‘ ni ‘)’ de chaque état sortent au plus 2 flèches si exactement 2, elles sont sans étiquette sur chaque état arrivent au plus 2 flèches

Exemple UMLV ã 3 4 10 5 6 7 8 16 17 18 Expression : (b* + aa + ab)*b 2 3 4 9 10 15 5 6 7 8 16 11 12 13 14 17 18 19 20 b a 1 bab reconnu ? non, mais infinité de chemins d’origine 17 et d'étiquette bab

Implantation adaptée p ‘a’ p1 q q1 q2 UMLV ã état = indice table des flèches struct{ caractère lettre; état suiv1, suiv2; } Trans[MAX]; automate (identifié à 2 états) état initial; état terminal; } automate; Trans 1 ‘ b ’ 2 2 1 4 3 1 4 4 10 5 ‘ a ’ 6 6 7 7 ‘ a ’ 8 8 10 9 3 5 10 16 11 ‘ a ’ 12 12 13 13 ‘ b ’ 14 14 16 15 9 11 16 15 18 17 15 18 18 19 19 ‘ b ’ 20 20 p ‘a’ p1 q q1 q2 initial = 17 terminal = 20

Algorithme de traduction UMLV ã Algorithme de traduction Production de l ’automate A( r ) associé à l ’expression rationnelle r Analyse(expression rationnelle r){ car  premier caractère de r ; A  Expression(); si(car  fin d’expression) erreur(); sinon retour A; }

Algorithme de traduction (suite) UMLV ã Algorithme de traduction (suite) Expression(){ A  Terme(); tant que(car = ‘+’){ car  caractère suivant; B  Terme(); A  Union(A,B); } retour A; Terme(){ A  Facteur(); tant que(car  {‘a’, ‘b’, ‘’, ‘e’, ‘(’}){ B  Facteur(); A  Produit(A,B);

Algorithme de traduction (suite) UMLV ã Algorithme de traduction (suite) Facteur(){ si(car  {‘a’, ‘b’, ‘’, ‘e’}){ A  Automate-élémentaire(car); car  caractère suivant; }sinon si(car = ‘(’){ A  Expression(); si(car = ‘)’) sinon erreur(); }sinon tant que(car = ‘*’){ A  Etoile(A); } retour A ;

(avec automate non-déterministe) UMLV ã Reconnaissance (avec automate non-déterministe) Écrire une fonction booléen reconnaît( automate A, mot x ) qui prend la valeur vraie ssi il existe un chemin d'étiquette x depuis A.initial jusqu’à A.terminal Programmation par essais et erreurs (attention aux cycles) programmation dynamique (mémorisation des états possibles) Clôture clôture(p) = { états accessibles à partir p par chemins sans étiquette }

Clôture UMLV ã Clôture de 17 = {1,3,4,5,9,10,11,15,16,17,18,19} 17 18 2 3 4 9 10 15 5 6 7 8 16 11 12 13 14 17 18 19 20 b a 1

UMLV ã Reconnaissance Expression : (b* + aa + ab)*b Reconnaissance de bab 2 3 4 9 10 15 5 6 7 8 16 11 12 13 14 17 18 19 20 b a 1 État initial 17 Clôture {1, 3, 4, 5, 9, 10, 11, 15, 16, 17, 18, 19}

Reconnaissance (suite) UMLV ã Reconnaissance (suite) Expression : (b* + aa + ab)*b Reconnaissance de bab 2 3 4 9 10 15 5 6 7 8 16 11 12 13 14 17 18 19 20 b a 1 {1, 3, 4, 5, 9, 10, 11, 15, 16, 17, 18, 19} Transition par b {2, 20} Clôture {1, 2, 3, 4, 5, 9, 10, 11, 15, 16, 18 , 19, 20}

Reconnaissance (suite) UMLV ã Reconnaissance (suite) Expression : (b* + aa + ab)*b Reconnaissance de bab 2 3 4 9 10 15 5 6 7 8 16 11 12 13 14 17 18 19 20 b a 1 {1, 2, 3, 4, 5, 9, 10, 11, 15, 16, 18, 19, 20} Transition par a {6, 12} Clôture {6, 7, 12, 13}

Reconnaissance (suite) UMLV ã Reconnaissance (suite) Expression : (b* + aa + ab)*b Reconnaissance de bab 2 3 4 9 10 15 5 6 7 8 16 11 12 13 14 17 18 19 20 b a 1 {6, 7, 12, 13} Transition par b {14} Clôture {1, 3, 4, 5, 9, 10, 11, 14, 15, 16, 18, 19} bab non reconnu car 20 non atteint

Algorithme de reconnaissance UMLV ã Algorithme de reconnaissance booléen reconnaît(automate A, mot x){ ensemble E; E  clôture(A.initial); tant que(non fin de x){ car  lettre suivante de x; E  clôture(transition(E,car)); } si(A.terminal  E) retour(vrai); sinon retour(faux); Lecture séquentielle du mot. Mémorisation (tampon) d'une seule lettre de x. Temps : O(nb états de A . | x |) (si bonne gestion de l ’ensemble E)

reconnu par A( r ), x  L(r) UMLV ã Recherche de motif Motif défini par l'expression rationnelle r A( r ) automate associé à r Motif dans le texte Principe de la recherche comme reconnaissance avec : ajout l’état initial à chaque position arrêt de la recherche dès que l’état terminal est atteint texte t segment x reconnu par A( r ), x  L(r)

Algorithme de recherche UMLV ã Algorithme de recherche booléen recherche(automate A, mot t){ ensemble E; E  clôture(A.initial); tant que(non fin de t){ car  lettre suivante de t; E  clôture({A.initial}transition(E,car)); si(A.terminal  E) retour(vrai); } retour(faux); Lecture séquentielle du texte. Mémorisation (tampon) d'une seule lettre de t. Temps : O(nb états de A . | t |) (si bonne gestion de l ’ensemble E)

Compromis temps-espace UMLV ã Compromis temps-espace expression rationnelle r automate non-déterministe A ( nb d'états £ 2 | r | ) déterminisation simulation de l'automate déterministe automate déterministe (nb d'états = O(2 | r |) ) recherche dans t en temps O(| t |) recherche dans t en temps O( | r | . | t |)

déterminisation simulation temps de O( | t | ) O( | r | . | t | ) UMLV ã déterminisation simulation temps de O( | t | ) O( | r | . | t | ) la recherche espace O(2| r | ) O( | r | )

UMLV ã LEX Création d'analyseurs lexicaux ou de traducteurs lex.1 spécifications en Lex compilateur Lex lex.yy.c analyseur lexical en C compilateur C a.out analyseur lexical source suite des unités lexicales (traduction) Spécifications : déclarations %% règles de traductions procédures auxiliaires

UMLV ã % {/* définitions des constantes littérales */ PPQ, PPE, EGA, DIF, PGQ, PGE, SI, ALORS, SINON, ID, NB, OPREL % } /* définitions régulières */ délim [ \t\n] bl {delim}+ lettre [A-Za-z] chiffre [0-9] id {lettre}+({lettre}|{chiffre})* nombre {chiffre}+(\.{chiffre}+)?(E[+\-]?{chiffre}+)? %% {bl} {/* pas d'action et pas de retour */ } si {return (SI) ; } alors {return (ALORS) ; } sinon {return (SINON) ; } {id} {yylval = RangerId ( ) ; return (ID) ; } {nombre} {yylval = RangerNb ( ) ; return (NB) ; } "<" {yylval = PPQ ; return (OPREL) ; } "<=" {yyval = PPE ; return (OPREL) ; } "=" {yyval = EGA ; return (OPREL) ; } "<>" {yyval = DIF ; return (OPREL) ; } ">" {yyval = PGQ ; return (OPREL) ; } ">=" {yyval = PGE ; return (OPREL) : }

UMLV ã %% RangerId(){ /* procédure qui range dans la table des symboles le lexème dont le premier caractère est pointé par yytext et dont la longueur est yyleng, et retourne un pointeur sur son entrée */ ... } RangerNb(){ /* procédure similaire pour ranger un lexème qui est un nombre */

Recherche des positions du mot x dans le texte t UMLV ã Recherche d'un mot Recherche des positions du mot x dans le texte t Par balayages (gauche-droite) et décalages texte t mot x … a a b b b a b a c a b a c a b a d b ... a b a c a b a d fenêtre Variables de travail texte t mot x 0 pos j n 0 i m b a

 m.n comparaisons au pire Temps moyen O(n) UMLV ã Algorithme naïf Naif(mot x, longueur m, mot t, longueur n){ j  0; i  0; tant que (i < m) et (j < n){ si (x[i] = t[j]){ j  j+1; i  i+1; } sinon { j  j-i+1; i  0; fin ; si (i > m) écrire(mot trouvé à la position j-i); sinon écrire(pas d'occurrence de x dans t); } Temps maximal O(m.n)  m.n comparaisons au pire Temps moyen O(n)  2.n comparaisons moyennes sur alphabet binaire (équiprobabilité et indépendance)

KMP : balayages gauche-droite et décalages compatibles UMLV ã Méthode de Knuth, Morris & Pratt KMP : balayages gauche-droite et décalages compatibles texte t mot x … a a b b b a b a c a b a c a b a d b ... a b a c a b a d fenêtre Bords : Bord(abacaba) = aba Longueur des bords des préfixes : bord [ i ] = |Bord( x[0..i-1] )| i 0 1 2 3 4 5 6 7 8 x[ i ] a b a c a b a d bord [ i ] -1 0 0 1 0 1 2 3 0

Recherche KMP texte t mot x i ’ = bord [ i ] UMLV ã 0 pos j n b a 0 i m a 0 i ’ m i ’ = bord [ i ]

moins de 2.n comparaisons recherche séquentielle (j ne décroît jamais) UMLV ã Algorithme KMP(mot x, longueur m, mot t, longueur n){ j  0 ; i  0 ; tant que (i < m) et (j < n){ tant que (i > 0) et (x[i]  t[j]) i  bord[i] ; j  j+1 ; i  i+1 ; } si (i = m) écrire(mot trouvé à la position j-m); sinon écrire(pas d'occurrence de x dans t); Temps O(n) moins de 2.n comparaisons recherche séquentielle (j ne décroît jamais) recherche linéaire mais pas en temps réel

Bords : Bord(u) = plus long préfixe et suffixe propre de u UMLV ã Calcul des bords Bords : Bord(u) = plus long préfixe et suffixe propre de u Note : le bord d ’un bord est un bord Bord(a b a c a b a c) = a b a c Bord(a b a c a b a b) = a b Bord(a b a c a b a d) = e mot x 0 j i m a a’ j = bord [ i ] si a=a’ bord [ i+1 ] = bord [ i ] +1 = j +1 sinon faire le calcul avec a sur Bord(x[0 .. j-1])

Temps O(m), moins de 2.m comparaisons} Comme la recherche ! UMLV ã Algorithme BORDS(mot x, longueur m){ bord[0]  -1 ; pour i  0 à m-1 faire { j  bord[i] ; tant que (j ³ 0) et (x[i] ¹ x[j]) j  bord[j] ; bord[i+1]  j+1 ; } retour bord ; Temps O(m), moins de 2.m comparaisons} Comme la recherche ! mot x 0 j i m a a’ j = bord [ i ]

Méthode de Boyer-Moore UMLV ã Méthode de Boyer-Moore (simplifiée) BM : balayages droite-gauche et décalages compatibles avec la lettre différente du texte texte t mot x … a a b b b a b a d a b a c a b a d b ... a b a c a c a c fenêtre Positions a a b c d e ... Posx[ a ] 1 6 2 8 8 ... a b a c a c a c Posx[ b ]=6

Valeurs de i et j après décalage i ’ = m UMLV ã Recherche BM 0 j j ’ n texte t mot x b a 0 i m b 0 i ’ Pos[ b ] Valeurs de i et j après décalage i ’ = m j ’ = j + Posx[ t [ j ] ] si Posx[ t [ j ] ] > m - i + 1 m - i + 1 sinon

Temps, sur des textes en langue naturelle, proche du UMLV ã Algorithme BM BM(mot x, longueur m, mot t, longueur n){ j  m-1 ; j  m-1 ; tant que (i  0) et (j < n) si(x[i] = t[j]){ j  j-1 ; i  i-1 ; } sinon { j  j + max{Pos[j],m-i+1} ; i  m-1 ; } si (i = -1) écrire(mot trouvé à la position j+1); sinon écrire(pas d'occurrence de x dans t); Temps maximal O(m.n) Temps, sur des textes en langue naturelle, proche du minimal : (n / m)

Calcul de Pos Pos[b]=6 Temps O(m + card A) UMLV ã a b a c a c a c Positions(mot x, longueur m){ pour chaque lettre a faire Pos[a]  m ; pour i  0 à m-2 faire Pos[x[i]]  m-i-1 ; retour Pos ; } Temps O(m + card A) a b a c a c a c Pos[b]=6 0 1 7