11.grammaire et langage - montefiore institute ulgdumont/pdf/ac10.pdf · par tableau entrée =...

39
Algorithmique P2 Algorithmique P2 Algorithmique P2 Algorithmique P2 Tables et Hachage Ulg, 2009-2010 R.Dumont

Upload: truongtruc

Post on 16-Sep-2018

231 views

Category:

Documents


0 download

TRANSCRIPT

Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Tables et Hachage

Ulg, 2009-2010R.Dumont

� Table = Ensemble d'entrées.� Entrées = Couples de type (clef, information)

TablesTablesTablesTables

� Par tableau◦ Entrée = (indice, données)� char Ville[25]� Ville[5] = "Liège"◦ Recherche par "accès directe", O(1)

� Par tableaux non ordonnés◦ Entrée = (données, données)

char Ville[25]

Tables Tables Tables Tables ---- ReprésentationReprésentationReprésentationReprésentation

� char Ville[25]� int CP[4]◦ Recherche "séquentielle", O(n)

� Par tableaux ordonnés◦ Entrée = (données, données)� char Ville[25]� int CP[4]◦ Recherche "dichotomique", O(log n)

� Compromis Temps-Espace◦ Problème de la Table = perte d'espace si U >> K◦ Table de hachage = table limitée au nécessaire

� Principe ◦ Une table T contient des alvéoles (=cases de T)◦ Une fonction (de hachage) permettant de répartir

(distribuer) les informations à partir de leur clé dans T

Tables de hachageTables de hachageTables de hachageTables de hachage

(distribuer) les informations à partir de leur clé dans T est de la forme

h : U � [0..m-1]◦ Pour chaque clé k de U, la fonction de hachage renvoie

h(k), qui désigne une des m alvéoles de T.� En théorie, chaque clé doit avoir autant de chance d’être

hachée vers n'importe quelle des cases de T◦ On dit que h(k) est le haché (condensé, résumé,…) de k.

FonctionnementFonctionnementFonctionnementFonctionnement

Algorithmes et Structures de données, B. Jacob, 2010, INF601, Université Le Mans

� Au lieu de U valeurs à réserver lors de la déclaration de T (cas de la table), on se contente de m possibilités (cas de la table de hachage)◦ m fixé par la fonction de hachage ◦ Besoin réduit en espace◦ Mais problème si deux clés ont le même haché (plusieurs

hachés pour une même alvéole)

Tables de hachageTables de hachageTables de hachageTables de hachage

hachés pour une même alvéole)� Problème de collision collision collision collision (voir k2 et k5)

� Solution :◦ Eviter les collisions ?� Par définition, impossible (car |U| > m et h est

déterministe)� En pratique, utilisation de fonctions de hachage

"aléatoires" qui diminue les collisions

Tables de hachage Tables de hachage Tables de hachage Tables de hachage ---- CollisionsCollisionsCollisionsCollisions

"aléatoires" qui diminue les collisions� Mais phénomène impossible à juguler, donc…◦ Gestion des collisions� Chainage� Adressage ouvert

� Chaque alvéole pointe sur une liste chainée contenant les éléments de même haché

Tables de hachage Tables de hachage Tables de hachage Tables de hachage ---- ChainageChainageChainageChainage

� Chaque alvéole de T pointe vers◦ une liste d'éléments, ou◦ NIL

� Taux de remplissage de T (contenant M alvéoles et N éléments) ◦ = N/M = α◦ = Nombre moyen d'éléments stockés dans une chaine

� Les performances moyennes du hachage dépendent de la manière avec laquelle la fonction de hachage h répartit en moyenne l’ensemble des clés à stocker parmi les m alvéoles.◦ Propriété de répartition uniforme

Si la fonction de hachage valide cette propriété,

Tables de hachage Tables de hachage Tables de hachage Tables de hachage ---- ChainageChainageChainageChainage

� Si la fonction de hachage valide cette propriété, on démontre que l'opération de recherche s'effectue en temps constant, soit O(1).

� Insertion et suppression sont également O(1), si listes doublement chainées.

� Permet α > 1

� Plusieurs techniques :◦ Méthode de la division� h(k) = k mod m� Choix du m :

� Éviter les puissances de 2Premier, sans être proche trop d'une puissance de 2

Hachage Hachage Hachage Hachage ---- FonctionsFonctionsFonctionsFonctions

� Premier, sans être proche trop d'une puissance de 2

� Exemple :� N = 2000 chaines de caractères, chainage souhaité de

maximum 3 éléments� M = 701, car premier, proche de 2000/3, distant de 512

et 1024

◦ Méthode de la multiplication� h(k) = ⌊m(k.A mod 1)⌋� avec 0<A<1 de la forme s/2w et où w représente la

taille des mots sur une machine donnée� Knuth : A proche de (√5 -1)/2 = 0.618033…

� m est du type 2p

Hachage Hachage Hachage Hachage ---- FonctionsFonctionsFonctionsFonctions

� m est du type 2p

◦ Exemple� Soit k =123456, w =32, p=14 (� m=16384)� A proche de (√5 − 1)/2, soit A =2654435769/232

� h(k) = ⌊214(123456. 2654435769/232 mod 1)⌋=67

� Les alvéoles ne contiennent qu'au plus un élément

� On remplit la table alvéole par alvéole.◦ Conséquence : la table peut être pleine◦ Taux de remplissage < 1

� Il n'y a plus de pointeurs de liste◦ L'espace mémoire libéré est utilisé pour la table

Adressage OuvertAdressage OuvertAdressage OuvertAdressage Ouvert

◦ L'espace mémoire libéré est utilisé pour la table◦ Conséquence : + d'alvéoles, moins de collisions

� Insertion◦ Sondage jusqu'à trouver une alvéole vide� Sondage linéaire� Sondage quadratique� Double hachage

� h(k,i) = (h'(k)+i) mod m◦ h'(k) est appelé fonction de fonction de fonction de fonction de

hachage auxiliairehachage auxiliairehachage auxiliairehachage auxiliaire◦ Principe :

� On sonde d'abord T[h'(k)]. Si vide, on insère k dans cette alvéole.

� Sinon, on sonde T[h'(k)+1],

Adressage Ouvert Adressage Ouvert Adressage Ouvert Adressage Ouvert –––– S. linéaireS. linéaireS. linéaireS. linéaire

� Sinon, on sonde T[h'(k)+1], etc. jusqu'à T[m-1], puis on revient à T[0], T[1],… jusque T[h'(k)-1].

� Problème des grappes fortesgrappes fortesgrappes fortesgrappes fortes(primary clustering)◦ Groupes de blocs consécutifs

occupés� Augmentation du temps de

recherche� Utilisable jusqu'à α <0.75

Jean-Eric Pin, Liafa, Jussieu, 1998

Sondage quadratiqueSondage quadratiqueSondage quadratiqueSondage quadratique

� h(k, i) = (h'(k) + c1i + c2i2) mod mavec h’ la fonction de hachage auxiliairei = 0, 1, . . . , m − 1, c1 et c2 ≠ de 0Dépend de i et non de la clé� Dépend de i et non de la clé◦ Problème des grappes faibles grappes faibles grappes faibles grappes faibles (secondary clustering)� Suite d'alvéoles occupées par des clés de même valeur

de hachage

� Utilisable si α <0.5

Double hachageDouble hachageDouble hachageDouble hachage

� h(k, i) = (h1(k) + i.h2(k)) mod m� Évite les regroupement autour de i+1

� Exemple (avec m=13, k=14)◦ soit h1(k)=k mod 13 et h2(k) =1+(k mod 11)◦ Donc, h (14) = 1 et h (14) = 4 ◦ Donc, h1(14) = 1 et h2(14) = 4 ◦ h(14, 0) = h1(14) = 1

� case occupée◦ h(14, 1) = (h1(14) + h2(14)) mod 13 = 5

� case occupée◦ h(14, 2) = (h1(14) + 2 × h2(14)) mod 13 = 9

� case libre

� Dépend de la clé et non plus de i

Conclusion Conclusion Conclusion Conclusion ---- En pratiqueEn pratiqueEn pratiqueEn pratique

� Une fonction de hachage transforme la valeur d'un élément (la clé) en l'indice d'une table◦ Elle doit être déterministe◦ Elle doit être facilement calculable

� Difficulté : répartir le plus uniformément possible les valeurs de hachage

� En pratique, une bonne fonction de hachage permet à 2 clés de motifs très proches d’avoir des valeurs de hachage très différentes

� Exemple (MD5 – 128 bits)◦ "tester" : f5d1278e8109edd94e1e4197e04873b9◦ "Tester" : 3095c3e4f1465133e5e6be134eb2ebe2 ◦ "testera" : a91fb03faec54384901f13f01d2ba0e3

Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Langage et grammaire

Ulg, 2009-2010R.Dumont

� Langage = ensemble de chaines de caractères� Chaines de caractères = les phrases du

langage� Chaque phrase possède une structurestructurestructurestructure◦ qui peut être décrite par un arbrearbrearbrearbre

LangageLangageLangageLangage

◦ qui peut être décrite par un arbrearbrearbrearbre◦ dont les règles de construction sont définies par

une grammairegrammairegrammairegrammaire� Exemple : langage de programmation◦ Phrases = les programmes◦ Programme = chaine constituée de mots ◦ Mot = séquence de caractères dont la structure est

spécifiée par une grammaire.

� Exemple : ◦ en français, une phrase valide est formée par un

sujet suivi d'un verbe (cas général).◦ Grammaire (simplifiée)� Phrase = sujet verbe� Sujet = "Pol" | "Sophie"

Verbe = "mange" | "dort"

Langage et SyntaxeLangage et SyntaxeLangage et SyntaxeLangage et Syntaxe

phrase

� Verbe = "mange" | "dort"◦ Fournit � Pol mange� Sophie mange� Sophie dort� Pol dort

� Dont l'arbre syntaxique est donné ci-contre

sujet verbe

Pol dort

� Pour une expression plus complexe, le principe reste identique, mais l'arbre se complexifie

� Soit la grammaire suivante◦ A := "id" "=" E◦ E := T | E "+" T

Langage Langage Langage Langage A

id = E

E + T

T

F

T * E

F T◦ E := T | E "+" T◦ T := F | T "*" E◦ F := "id" | "cst" | "(" E ")"◦ Peut par exemple fournir

� id = id� id = cst� id = (id + cst) + cst * id

� Dont l'arbre syntaxique est donné ci-contre

� …

( E )

E + T

T F

F

id

cst

cst F

id

� Règle d'une grammaireT := n� Où

� T est un symbole non terminal� n est une chaine composée de terminaux (lexèmes, tokens,

jetons) ouououou de non-terminaux (variables)

Définition d'une grammaire:

Grammaire et Grammaire et Grammaire et Grammaire et tokenstokenstokenstokens

� Définition d'une grammaire: ◦ collection de règles permettant de substituer un non-

terminal par une suite de symboles (terminaux et non-terminaux)

� Définition d'un token:◦ Symbole terminal représentant la plus petite unité

lexicale d'un langage.

� métalangage utilisé pour décrire un autrelangage

� Inventé par John Backus pour décrire Algol 58 (simplifié par la suite par Peter Naur)

� Règles d'écriture◦ ::= "est défini comme"

BNF (BNF (BNF (BNF (BackusBackusBackusBackus NaurNaurNaurNaur FormFormFormForm))))

◦ ::= "est défini comme" ◦ | "ou" ◦ < > encadrent les symboles non-terminaux (par

opposition aux terminaux représentés tel-quel). ◦ On encadre par " " les symboles terminaux d’un seul

caractère.

� Exemple pour un programme écrit dans un langage élémentaire :

<programme> ::= PROGRAMME <suite_de_declarations> debut <suite_d_instructions> fin ;

◦ Mot clef "PROGRAMME" suivi de déclarations, suivi du mot-clef "debut", suivi par des instructions, suivi du mot-clef "fin" et d'un point-virgule.

Simplifications d'écriture par deux constructions

BNF (BNF (BNF (BNF (BackusBackusBackusBackus NaurNaurNaurNaur FormFormFormForm))))

"fin" et d'un point-virgule.� Simplifications d'écriture par deux constructions

supplémentaires (� EBNFEBNFEBNFEBNF) :◦ {x} exprime la répétition : zéro, une ou plusieurs

occurrences de x.� Par exemple pour un nom qui doit commencer par une lettre de

l’alphabet pouvant être suivie par tout autre caractère : � <identifiant> ::= <lettre> { <lettre> | <digit> }◦ [x] exprime l'option : zéro ou une occurrence de x.

� <clause_si> ::= si <oui_ou_non> alors <suite_d_instructions> [ sinon <suite_d_instructions> ] fin si ;

� Définition des listes� expression, expression_list, target_list,

Retour à PythonRetour à PythonRetour à PythonRetour à Python

� expression, expression_list, target_list, old_expression sont également définis…

Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Algorithmique P2Compilateur et interpréteur

Ulg, 2009-2010R.Dumont

� Problème : langage humain VS langage machine

Compilateur Compilateur Compilateur Compilateur ---- InterpréteurInterpréteurInterpréteurInterpréteur

Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/

� Solution : langage de programmation◦ Ada Lovelace : premier programme informatique

� Machine Analytique de Babbage (1843)

Langage de programmationLangage de programmationLangage de programmationLangage de programmation

◦ Années 50 : premiers langages "modernes" répandus� FORTRAN : FORmula TRANslator (Backus)� LISP : LISt Processor (McCarthy)� COBOL : Common Business Oriented Language (Hopper)� ALGOL 60 : ALGOrithmic Language

� Le langage de programmation permet l’écriture (et a fortiori la lecture) du code source par un humain (le programmeur)

� Evolution constante

Langage de programmationLangage de programmationLangage de programmationLangage de programmation

� Evolution constante◦ Versioning (PHP 4 � PHP 5)◦ Réactualisation d'anciens langages (COBOL �

COBOL 2002)◦ Héritage historique (LISP � Scheme)

� � Se comptent par centaines

� Un CPU ne peut pas exécuter un code source 'brut'.

� Celui-ci doit être traité préalablement◦ Transformé (compilation)◦ Evalué (interprétation)

ExécutionExécutionExécutionExécution

◦ Evalué (interprétation)

Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/

� Programme qui transforme du code source (en entrée) en du code exécutable par une machine (en sortie)

CompilateurCompilateurCompilateurCompilateur

� L'exécutable sera ensuite utilisé pour traiter les données (en entrée) afin de fournir des résultats (en sortie)

Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/

� Compilateurs classiques◦ C, JAVA

� En C

CompilateurCompilateurCompilateurCompilateur

Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/

� Programme qui prend un code source et des données (en entrée) et l’exécute directement afin de fournir des résultats (en sortie)

� Interpréteurs classiques◦ Ruby

InterpréteurInterpréteurInterpréteurInterpréteur

◦ Ruby◦ Shells Unix

� Comp. Vs Interp.◦ Rapidité d’exécution◦ Souplesse d'utilisation◦ Facilité de développement

Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/

� Couche supplémentaire entre le code source et la machine physique

� Objectif : meilleure portabilité ◦ Indépendance de la machine (cf. problème compilateurs C

p.ex.)Interpréteur pour le langage machine

Machine virtuelle ?Machine virtuelle ?Machine virtuelle ?Machine virtuelle ?

� Interpréteur pour le langage machine� Services : ◦ Exécution◦ Gestion de la mémoire◦ Chargement dynamique◦ Parallélisme, synchronisation, gestion des ressources

� Java utilise notamment ce principe

Structure d'un compilateurStructure d'un compilateurStructure d'un compilateurStructure d'un compilateur

Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/

� Analyse Lexicale◦ Extraire les jetons du flux de caractères que

représente le code source◦ Exemple : for(i=0;i<N;i++){printf("%d\n",i);} � Mot clé "for"

Structure d'un compilateurStructure d'un compilateurStructure d'un compilateurStructure d'un compilateur

� Symbole "("� Identifiant "i"� Symbole "="� Entier "0"� Symbole ";"� etc.

� Analyse Syntaxique◦ Reconstruire la structure syntaxique à partir des

lexèmes◦ Les règles syntaxiques d'un langage sont décrites

dans sa grammairegrammairegrammairegrammaire.Exemple : « Mon frère étudie. »

Structure d'un compilateurStructure d'un compilateurStructure d'un compilateurStructure d'un compilateur

� Exemple : « Mon frère étudie. »

Mon frère étudie .

Article défini Nom communVerbe

conjuguéSymbole de terminaison

Groupe nominal sujet

Groupe verbalSymboles de ponctuation

Phrase

� Analyse Sémantique◦ Vérification du sens et de sa cohérence� Exemple : « Le ciel mange une télévision.»

� Syntaxe : OK� Sens : NOK

� Génération du code

Structure d'un compilateurStructure d'un compilateurStructure d'un compilateurStructure d'un compilateur

� Génération du code◦ Code dans le langage demandé grâce aux informations

fournies par les étapes précédentes◦ Eventuellement en plusieurs étapes� Langage intermédiaire

� Si le langage initial est très éloigné du langage cible� Compilateur optimisant

� Compilateur dont on peut spécifier l'architecture de la machine cible

Structure d'un interpréteurStructure d'un interpréteurStructure d'un interpréteurStructure d'un interpréteur

Théorie et construction des compilateurs, Jean Privat, 2009-10, Univ. Québec, http://www.info2.uqam.ca/~privat/ens/compil/

• La La La La SyntaxeSyntaxeSyntaxeSyntaxe:::: la forme (ou structure) des expressions

• La La La La SémantiqueSémantiqueSémantiqueSémantique:::: la signification des expressions

• La définition d'un langage est donnée par sasyntaxe etetetet sa sémantique

En résuméEn résuméEn résuméEn résumé

syntaxe etetetet sa sémantique– Qui utilise la définition?

• Les concepteurs

• Ceux qui effectuent l'implémentation

• Les programmeurs (usagers)