Expressions régulières et hash tables

Slides:



Advertisements
Présentations similaires
Tris.
Advertisements

Chap. 4 Recherche en Table
Chapitre annexe. Récursivité
L-System et modélisation de plantes…
M. SAILLOUR Lycée Notre Dame du Kreisker St Pol de Léon
Portée des variables VBA & Excel
Calcul géométrique avec des données incertaines
Calculs de complexité d'algorithmes
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
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 &
INTRODUCTION.
Chap. 1 Structures séquentielles : listes linéaires
Expressions rationnelles
Ensembles de test et morphismes sans répétition Francis Wlazinski - Gwénaël Richomme.
Construction du graphe de Spehner.. Différentes étapes 1) Alphabet. 2) Langage. 3) Création des sommets du graphe de Spehner. 4) Ajout des différents.
Développement d’applications web
IFT313 Introduction aux langages formels
Conception et analyse des algorithmes
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
OCaml - Les listes L3 MI.
Eléments d ’algèbre relationnelle
TP math-G-101.
Récursivité.
Principes de la technologie orientée objets
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
OCaml – Les arbres L3 MI.
Algorithmes Branch & Bound
Analyse lexicale Généralités Expressions rationnelles Automates finis
Notions de base de la théorie des langages
1.2 COMPOSANTES DES VECTEURS
I.A. Session 2009/2010 E.P.S.I. Bordeaux – C.S.I.I – 2 ème Année – Cours n°3.
Gestion de Fichiers Arbres B.
L’utilisation des bases de données
Complément Le diagramme des classes
Racines carrées 1) Racine carrée d’un nombre positif
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Expressions régulières et hash tables
IFT Complexité et NP-complétude
1 CSI3525: Concepts des Languages de Programmation Notes # 3: Description Syntaxique des Languages.
Chapitre 7: Le théorème de Kleene
Les expressions algébriques
1.1 LES VECTEURS GÉOMÉTRIQUES
IFT 6800 Atelier en Technologies d’information
Chapitre 3 Syntaxe et sémantique.
IFT313 – Introduction aux langages formels Éric Beaudry Exercices Expressions régulières, ADF et AFN Été 2010.
Introduction à l’algèbre
Programmation logique Le Langage PROLOG
Rappel Modèle analyse-synthèse de la compilation
Mathématiques 9: L’algèbre.
Le calcul algébrique.
IFT Complexité et NP-complétude Chapitre 0 Rappels.
ASI 3 Méthodes numériques pour l’ingénieur
Mise en forme en Mathématiques
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
SIMPLIFICATION DES EQUATIONS LOGIQUES
Paradigmes des Langages de Programmation
CHAPITRE 6 LES PROBABILITES.
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Le chiffrement asymétrique
INTRODUCTION.
Les machines de Turing Lionel Blavy Sébastien Giraud Fabien Tricoire
Chapitre 3 :Algèbre de Boole
Algorithmique et programmation (1)‏
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Sélection de colonnes (la projection)
Cours LCS N°4 Présenté par Mr: LALLALI
Abdelkader Heni FUNDP Syntaxe et sémantique Abdelkader Heni FUNDP
MATHÉMATIQUES DISCRÈTES Chapitre 1 (Section 5)
Transcription de la présentation:

Expressions régulières et hash tables Expressions rationnelles/régulières Hash Tables

Expressions rationnelles Qu'est-ce une expression rationnelle (régulière)? Définition et propriétés Exercices

Définitions : alphabet, mot, langage Définition Un alphabet Σ est un ensemble fini de symboles, comme par exemple de lettres, de chiffres ou d'autres sigles. Exemples Σ = {a,b,c} Σ = {0,1} Définition Un mot w défini sur un alphabet est une suite ou séquence finie de symboles appartenant à Σ. Exemples Si Σ = {a,b,c}, w = abc est un mot défini sur Σ. La séquence de 0 symboles est nommée le mot vide et s’écrit : ε. Définition Un langage L défini sur un alphabet Σ est un ensemble de mots définis sur l'alphabet en question. Cet ensemble de mots peut être infini. Exemple Soit l'alphabet Σ = {a,b,c}, le langage L = {acbb, accbb, acccbb, …} est le langage de tous le mots qui débutent par le symbole a, suivi d'au moins un symbole c et qui se terminent par deux symboles b.

Opérations sur les langages Union L'union L1 U L2 de deux langages L1 et L2 définis sur un alphabet Σ correspond exactement à l'union d'ensembles. Exemple Soient Σ= {a,b,c}, L1 ={a,b} et L2 ={bac,b, c}, on a L1 U L2 = {a,b,bac,c} Concaténation Soient L1 et L2 deux langages définis sur un alphabet Σ, l'opération de concaténation est définie comme suit L1 . L2 = {w1.w2 , t.q. w1 appartient à L1 et w2 appartient à L2 } L'élément neutre est donc l'ensemble Lε = {ε} (L. Lε = L, Lε .L = L) Soient Σ= {a,b,c}, L1 ={a,b} et L2 ={bac,b,a}, on a L1 . L2 = {abac,bbac,ab,bb,aa,ba}

Opérations sur les langages Puissance La puissance d'un langage L, notée Ln où n >= 0, est définie par 1) L0 = {ε} 2) Ln+1 = Ln . L Kleene star ou fermeture itérative La fermeture itérative (ou de Kleene) d'un langage L, notée L*, est l'ensemble de mots résultant d'une concaténation d'un nombre fini de mots de L. Formellement : L* = L0 U L1 U L2 U L3 … Le mot vide appartient donc à L* mais pas à L+ qui est défini comme suit : L+ = L1 U L2 U L3 … = L . L* Exemples Soient Σ= {a}, L = {a}. Alors L0 ={ε}, L1={a}, L2 ={aa}, L3={aaa},…, L+ = {a,aa,aaa,aaaa,aaaaa,…..}, L* = {ε, a,aa,aaa,aaaa,aaaaa,…..}.

Formalisme de spécification des langages Pour spécifier (décrire formellement) un langage, différents formalismes sont à notre disposition. La première solution serait d’énumérer de manière exhaustive les composants du langage. Cela est une définition extensionnelle. C'est irréalisable si le langage est infini. Pour décrire un langage infini on utilise des formalismes plus riches, comme les grammaires, les machine de Turing, etc. Le formalisme le plus simple est celui des expressions rationnelles ou régulières.

Qu'est-ce une expression rationnelle (régulière)? Définition Soit un alphabet Σ. Une expression régulière définie sur Σ, ainsi que les ensembles qu'elle dénote, sont définis récursivement comme suit : 1) Ø est une expression régulière dénotant l'ensemble vide, 2) ε est une expression régulière dénotant l'ensemble {ε}, 3) pour tous a dans Σ, a est une expression régulière dénotant l'ensemble {a}, 4) si r et s sont des expressions régulières dénotant respectivement les ensembles R et S, alors (r + s), (rs), (r*) sont des expressions régulières dénotant respectivement les ensembles R U S, R . S, et R*, 5) Rien d'autre n'est considéré comme une expression régulière. Le langage que dénote une expression régulière r s’écrit L(r). Note terminologique: expression régulière = expression rationnelle.

Expressions rationnelles - exemples Soit l'alphabet Σ = {a,b} et l'expression régulière r = (a(a+b)*), alors le langage généré par r est L(r) ={a} . {a,b}* Son extension contient donc {a,aa,aaa,aaaa,…,ab,aba,abbaaababa, …}. C’est le langage de toutes les chaînes de a et de b commençant par un a. Soit l'alphabet Σ = {0,1}, l'expression régulière s= (0*1)* dénote l'ensemble L(s) = {{0}*. {1}}* ou bien L(s) = {x t.q. x appartient à {0,1}* et x est vide ou représente un nombre impair} Son extension contient donc {ε,1,01,010101, 100001, … }.

Exercices : expressions rationnelles Exercice 1 Vrai ou faux? baa appartient à (a*b*a*b*) b* a* intersection a* b* = a* U b* abcd appartient à (a(cd)*b*)

Exercices : expressions rationnelles Français  Expressions régulières Écrire les expressions régulières sur Σ = {a,b,c} dénotant les langages suivants : tous les mots contenant a tous les mots ne contenant pas ac

Solutions Soit Σ = {a,b,c} , tous les mots contenant a tous les mots ne contenant pas ac

Exercices : expressions rationnelles Exercice 3 Expressions régulières  Français Décrire en français le langage dénoté par les expressions régulières suivantes : (a|b)*b(a|b)*a(a|b)* b*(abb*)*aa(bb*a)*b*

Solutions (a|b)*b(a|b)*a(a|b)* b*(abb*)*aa(bb*a)*b* Décrire en français le langage dénoté par les expressions régulières suivantes : (a|b)*b(a|b)*a(a|b)* b*(abb*)*aa(bb*a)*b*

Exercices : expressions rationnelles Français  Expressions régulières Écrire les expressions régulières sur Σ = {a,b} dénotant les langages suivants : tous les mots de longueur 2 tous les mots de longueur paire tous les mos contenant un nombre impair de b tous les mots ne contenant pas plus que deux a consécutifs tous les mots ne contenant pas aba

Solutions Écrire les expressions régulières sur Σ = {a,b} dénotant les langages suivants : tous les mots de longueur 2 tous les mots de longueur paire tous les mos contenant un nombre impair de b tous les mots ne contenant pas plus que deux a consécutifs tous les mots ne contenant pas aba

Exercices : expressions rationnelles Exercice 5 Expressions régulières  Français Décrire en français les langages dénotés par les expressions régulières suivantes : (11+0)*(00+1)* (1+01+001)*(ε+0+00) 0*(10*10*10*)*

Solutions Décrire en français les langages dénotés par les expressions régulières suivantes : (11+0)*(00+1)* (1+01+001)*(ε+0+00) 0*(10*10*10*)*

Hash Tables Plusieurs applications informatiques, et parmi eux, celle qui intéressent le TALN, nécessitent seulement les opérations INSERT, DELETE et SEARCH. Par exemple, les compilateurs maintient une table des symboles, qu’ils consultent pour vérifier les noms et les types des variables. Les hash tables (tableaux d’hashage) sont des structures des données très appropriées pour mettre en place un dictionnaire et le consulter.

Tableaux d’accès direct La techniques des tableaux à accès direct marche assez bien si l’ensemble m des clés uniques est petit. On utilise un tableau T[0..m-1] où chaque position correspond à une clé. 1 2 3 4 5 6 7 8 3 5 7

Tableaux d’accès direct Les opérations sont très simples et executées en temps constant O(1). Recherche(T,k) return T[k] Insert(T,x) T[key(x)] <- x Delete(T,x) T[key(x)] <- NIL

Tableaux d’hashage Désavantage de l’adresse directe Si l’ensemble des clés possibles U est grand, il y a des problèmes de mémoire Si l’ensemble des clés réellement utilisées est beaucoup plus petit que U, une grande partie de la mémoire est gaspillée.

Tableaux d’accès direct Avec l’adresse directe, un élément à clé k est placé en position k. Avec hashage, il est stocké en position h(k). Le seul problème avec cette technique sont les collisions. 1 2 3 4 5 6 7 8 H(k1) H(k5) H(k3)=h(k7) 3 5 7

Tableaux d’hashage Collision: lorsque deux éléments ayant clés différentes ont la même valeur d’hashage. Solutions (partielle): fonctions d’hashage pseudo-aléatoire (random-looking hash functions). Chaining: les éléments sont associés à la même position dans une liste chaînée. la complexité de recherche, insertion et effacement est proportionnelle à la longueur de cette liste.

Fonction d’hashage Une bonne fonction d’hashage satisfait (approximativement) la présupposition d’hashage uniforme: pour toutes positions, une clé a la même probabilité d’être associé à cette position En général, une bonne technique consiste à développer une fonction indépendante de toutes régularités des distribution dans les données.

Fonction d’hashage Hashage par divisions: h(k) = k mod m m est choisi tel que le résultat de la division dépend de toute le chiffres de k (pas puissance de 2 ou de 10, m=prime) Hashage par multiplication: h(k) = floor(m(k A mod 1)) en général, on choisit une puissance de 2 Hashage universel= hashage aléatoire

Open addressing Open addressing est une techniques autre que chaining pour résoudre les collisions On n’utilise aucune structure externe, mais on relie les cases disponibles par double hashage. h(k,i) = (h1(k) + ih2(k)) mod m Cela évite les clusters des valeurs dans le tableau qui surgissent avec d’autres techniques. 1 2 3 4 5 6 7 8 79 69 98