Title: LINF1251: Enregistrements et Arbres
1LINF1251Enregistrements et Arbres
- Peter Van Roy
- Département dIngénierie Informatique, UCL
- pvr_at_info.ucl.ac.be
2Test le 9 mars 2005!
- Le test aura une durée dune heure
- Pendant la première moitié du cours, dans
lauditoire du cours - La matière est toute la matière des cinq
premières semaines - Test à livre fermé, il suffit davoir un stylo ou
un crayon - Il y aura une question pratique (écrire un petit
programme) et une question théorique (définir
quelques concepts) - Le test comptera pour 25 des points
- Dispensatoire tu peux garder les points ou
refaire la matière pendant lexamen à la fin - Un bon feedback pour le cours!
3Ce quon va voir aujourdhui
- Résumé du dernier cours
- Les tuples et les enregistrements
- Une liste est un tuple
- Un tuple est un enregistrement
- Les arbres
- Les arbres binaires ordonnés
- Arbres de recherche
- Introduction à la sémantique
4Résumédu dernier cours
5Techniques de programmation
- Techniques de base
- Utiliser les variables non-liées pour permettre
les appels récursifs en dernier (exemple
dAppend) - Utiliser un accumulateur pour augmenter
lefficacité dun algorithme (exemple de Reverse) - Utiliser un type pour définir une fonction
récursive (exemple de Flatten) - Diviser pour régner
- Algorithme de Mergesort
- Programmer avec des accumulateurs
- Un accumulateur est un état qui est
successivement transformé
6Les tuples
7Tuples
X
Xstate(1 a 2)
- Un tuple permet de combiner plusieurs valeurs
- Par exemple 1, a, 2
- La position est significative première,
deuxième, troisième! - Un tuple a une étiquette (label)
- Par exemple state
8Opérationssur les tuples
X
Xstate(1 a 2)
- Label X renvoie létiquette du tuple X
- Par exemple state
- Cest un atome
- Width X renvoie la largeur (nombre de champs)
- Par exemple 3
- Cest toujours un entier positif ou zéro
9Accès aux champs(opération .)
X
Xstate(1 a 2)
- Les champs sont numérotés de 1 jusquà Width X
- X.N renvoie le nième champ du tuple
- Par exemple, X.1 renvoie 1
- Par exemple, X.3 renvoie 2
- Dans lexpression X.N, N sappelle le nom du
champ (feature)
10Construire un arbre
X
m
Z
Y
- Un arbre peut être construit avec des
tuples declare - Yl(1 2) Zr(3 4)
- Xm(Y Z)
11Opération dégalité ()
- Tester légalité avec un nombre ou un atome
- Cest simple le nombre ou latome doit être le
même - Souvent le pattern matching est plus court
- Testing légalité des arbres
- Cest simple aussi les deux arbres doivent avoir
les même sous-arbres et les mêmes feuilles - Attention aux arbres avec des cycles!
- Conseil pour linstant, éviter ce genre darbres
12Résumé des tuples
- Tuple
- Étiquette (label)
- Largeur (width)
- Champ (field)
- Nom de champ (feature)
- On peut construire des arbres
- On peut les utiliser dans le pattern matching
- On peut les comparer avec
13Une liste est un tuple
- Une liste HT est un tuple (H T)
- Ceci permet la simplicité au lieu davoir deux
concepts (tuples et listes), il ny a quun
concept (tuple) - A cause de sa grande utilité, une liste est
soutenue par un sucre syntaxique - Cest uniquement pour le confort du programmeur,
dans le langage noyau il ny a que des tuples
14Les enregistrements(records)
15Enregistrements (records)
- Un enregistrement est une généralisation dun
tuple - Les noms des champs peuvent être des atomes
- Les noms des champs peuvent être nimporte quel
entier - Pas besoin de commencer avec 1
- Pas besoin dêtre consécutif
- Un enregistrement a aussi une étiquette et un
largeur
16Enregistrements
X
Xstate(a1 2a b2)
a
b
2
- La position nest plus significative
- Il y a le nom du champ qui est significatif à la
place - Laccès aux champs est comme avec les tuples
- X.a1
17Opérationssur les enregistrements
- Il y a les opérations détiquette et de largeur
- Label Xstate
- Width X3
- Il y a le test dégalité
- Xstate(a1 b2 2a)
- Il y a une nouvelle opération larité
- La liste des noms de champs
- Arity X2 a b (en ordre lexicographique)
- Larité marche aussi pour les tuples et les
listes (!)
18Un tuple est un enregistrement
- Lenregistrement
- X state(1a 2b 3c)
- est équivalent à
- X state(a b c)
- Dans un tuple, tous les champs sont numérotés
consécutivement à partir de 1 - Quest-ce qui se passe si on fait
- X state(a 2b 3c)
- ou
- X state(2b 3c a)
- Dans un enregistrement, tous les champs sans nom
sont numérotés consécutivement à partir de 1
19Il ny a que des enregistrements
- Dans le langage noyau il ny a que des
enregistrements - Un atome est un enregistrement dont le largeur
est 0 - Un tuple est un enregistrement dont les noms des
champs sont des entiers successifs à partir de 1 - Si on ne satisfait pas à cette condition, cest
un enregistrement - Une liste est construit avec les tuples nil et
(X Y) - Cest la simplicité
20Quelques exemples
- Pour les enregistrements suivants sagit-il dun
tuple ou une liste? - Aa(1a 2b 3c)
- Ba(1a 2b 4c)
- Ca(0a 1b 2c)
- Da(1a 2b 3c d)
- Ea(a 2b 3c 4d)
- Fa(2b 3c 4d a)
- Ga(1a 2b 3c food)
- H(1a 2(1b 2nil))
- I(1a 2(1b 3nil))
21Les arbres
22Les arbres
- Apart les listes, les arbres sont les structures
de données inductives les plus importantes - Un arbre est une feuille ( leaf ) ou une
séquence de zéro ou plusieurs arbres - Une liste a une structure linéaire, mais un arbre
a une structure bifurcante - Il y a énormément de différentes sortes darbres.
Nous allons regarder une seule sorte darbre,
les arbres binaires ordonnés.
23Arbres binaires ordonnés
- ltbtree Tgt tree(keyT valueltvaluegt ltbtree Tgt
ltbtree Tgt) leaf - Binaire chaque noeud qui nest pas une feuille a
deux sous-arbres - Ordonné les clés du sous-arbre gauche lt clé du
noeud lt clés du sous-arbre droite
key3 valuex
key1 valuey
key5 valuez
leaf
leaf
leaf
leaf
24Arbres de recherche
- Arbre de recherche Un arbre qui est utilisé pour
rechercher des informations, insérer des
informations, ou enlever des informations - Définissons trois opérations
- Lookup X T renvoie la valeur qui correspond à
la clé X - Insert X V T renvoie un nouvel arbre qui
contient (X,V) - Delete X T renvoie un nouvel arbre qui ne
contient pas X
25Rechercher des informations
- Il y a quatre cas de figure
- X nest pas trouvé
- X est trouvé
- X peut être dans le sous-arbre gauche
- X peut être dans le sous-arbre droite
fun Lookup X T case T of leaf then
notfound tree(keyY valueV T1 T2) andthen
XY then found(V) tree(keyY valueV T1
T2) andthen XltY then Lookup X T1
tree(keyY valueV T1 T2) andthen XgtY
then Lookup X T2 end end
26Insérer des informations
- Il y a quatre cas de figure
- (X,V) est inséré tout de suite
- (X,V) remplace un nœud existant avec la même clé
- (X,V) est inséré dans le sous-arbre gauche
- (X,V) est inséré dans le sous-arbre droite
fun Insert X V T case T of leaf then
tree(keyX valueV leaf leaf) tree(keyY
valueW T1 T2) andthen XY then tree(keyX
valueV T1 T2) tree(keyY valueW T1 T2)
andthen XltY then tree(keyY valueW Insert X V
T1 T2) tree(keyY valueW T1 T2) andthen
XgtY then tree(keyY valueW T1 Insert X V T2)
end end
27Enlever des informations (1)
- Il y a quatre cas de figure
- (X,V) nest pas dans larbre
- (X,V) est enlevé tout de suite
- (X,V) est enlevé du sous-arbre gauche
- (X,V) est enlevé du sous-arbre droite
- Vrai? FAUX!
fun Delete X T case T of leaf then
leaf tree(keyY valueW T1 T2) andthen
XY then leaf tree(keyY valueW T1 T2)
andthen XltY then tree(keyY valueW Delete X
T1 T2) tree(keyY valueW T1 T2) andthen
XgtY then tree(keyY valueW T1 Delete X T2)
end end
28Enlever un élémentdun arbre binaire
X
X
Enlever X dun arbre binaire. Le cas simple est
quand un des sous-arbres est vide. Ce nest pas
toujours le cas!
29Enlever un élémentdun arbre binaire
A
A
X
?
Enlever X dun arbre binaire. Le problème est de
réparer larbre après la disparition de X.
30Enlèvement dun arbre binaire
enlever X
déplacer Y
X
Y
Y
Remplir le trou après lenlèvement de X
31Enlever des informations (2)
- Le problème avec lautre programme est quil
nenlève pas correctement un nœud non-feuille - Pour le faire correctement, larbre doit être
reorganisé - Un nouvel élément doit remplacer lélément enlevé
- Lélément peut être le plus petit du sous-arbre
droite ou le plus grand du sous-arbre gauche
fun Delete X T case T of leaf then
leaf tree(keyY valueW T1 T2) andthen
XY then case RemoveSmallest T2 of none then
T1 YpWpTp then tree(keyYp
valueWp T1 Tp) end end end
32Enlever des informations (3)
- Pour enlever une racine Y, il y a deux
possibilités - Un sous-arbre est une feuille. On prend lautre.
- Aucun sous-arbre nest une feuille. On enlève un
élément dun des sous-arbres.
Y
T1
T1
leaf
Y
Yp
T1
T2
T1
Tp
33Enlever des informations (4)
- La fonction RemoveSmallest T enlève le plus
petit élément de T et renvoie le triplet
XpVpTp, où (Xp,Vp) est le plus petit élément et
Tp est larbre restant
fun RemoveSmallest T case T of leaf
then none tree(keyX valueV T1 T2) then
case RemoveSmallest T2 of none
then XVT2 XpVpTp then
XpVptree(keyX valueV T1 Tp) end
end end
34Enlever des informations (5)
- Pourquoi lopération denlèvement est-elle
compliquée? - Cest parce que larbre satisfait une condition
globale, dêtre ordonné - Lopération denlèvement doit travailler pour
maintenir cette condition - Beaucoup dalgorithmes sur des arbres dépendent
des conditions globales et doivent travailler dur
pour les maintenir - Le bon côté de la condition globale est quelle
donne à larbre une étincelle de magie larbre
se comporte un peu comme un être vivant
( comportement orienté vers des buts ) - Les êtres vivants sont très orientés vers des buts
35Introduction à la sémantique
36Votre programme est-il correct?
- Un programme est correct quand il fait ce quon
veut quil fasse - Comment se rassurer de cela?
- Il y a deux points de départ
- La spécification du programme une définition du
résultat du programme en termes de lentrée
(typiquement une fonction ou relation
mathématique) - La sémantique du langage un modèle précis des
opérations du langage de programmation - On doit prouver que la spécification est
satisfaite par le programme, quand il exécute
selon la sémantique du langage
37Les trois piliers
- La spécificationce quon veut
- Le programmece quon a
- La sémantique permet de faire le lien entre les
deux de prouver que ce quon a marche comme on
veut!
Spécification (formule mathématique)
Sémantique
Programme (langage de programmation)
38Induction mathématique
- Pour les programmes récursifs, la preuve
utilisera linduction mathématique - Un programme récursif est basé sur un ensemble
ordonné, comme les entiers et les listes - On montre dabord lexactitude du programme pour
les cas de base - Ensuite, on montre que si le programme est
correct pour un cas donné, alors il est correct
pour le cas suivant - Pour les entiers, le cas de base est souvent 0 ou
1, et pour un entier n le cas suivant est n1 - Pour les listes, le cas de base est nil ou une
liste avec un ou plusieurs éléments, et pour une
liste T le cas suivant est HT
39Exempleexactitude de la factorielle
- La spécification de Fact N (purement
mathématique) - 0! 1
- n! n ((n-1)!) si ngt0
- Le programme (en langage de programmation)
- fun Fact N
- if N0 then 1 else NFact N-1 end
- end
- Où est la sémantique du langage?
- On la verra la semaine prochaine!
- Aujourdhui le raisonnement sera intuitif
40Raisonnement pour la factorielle
- Il faut démontrer que lexécution de Fact N
donne n! pour tout n - Cas de base n0
- La spécification montre 0!1
- Lexécution de Fact 0 avec la sémantique montre
Fact 01 - Cas inductif (n-1) n
- Lexécution de Fact N, selon la sémantique,
montre que Fact N NFact N-1 - Avec lhypothèse de linduction, on sait que
Fact N-1(n-1)! - Si la multiplication est exacte, on sait donc
Fact NN((n-1)!) - Selon la définition mathématique de la
factorielle, on peut déduire Fact Nn! - Pour finir la preuve, il faut la sémantique du
langage!
41Machine abstraite
- Comment peut-on définir la sémantique dun
langage de programmation? - Une manière simple et puissante est la machine
abstraite - Une construction mathématique qui modélise
lexécution - Nous allons définir une machine abstraite pour
notre langage - Cette machine est assez générale elle peut
servir pour presque tous les langages de
programmation - Plus tard dans le cours, nous verrons par exemple
comment définir des objets et des classes - Avec la machine abstraite, on peut répondre à
beaucoup de questions sur lexécution - On peut prouver lexactitude des programmes ou
comprendre lexécution des programmes compliqués
ou calculer le temps dexécution dun programme
42Concepts de lamachine abstraite
- Mémoire à affectation unique s x110,x2,x320
- Variables et leurs valeurs
- Environnement E X x, Y y
- Lien entre identificateurs et variables en
mémoire - Instruction sémantique (ltsgt,E)
- Une instruction avec son environnement
- Pile sémantique ST (lts1gt,E1), , (ltsngt,En)
- Une pile dinstructions sémantiques
- Exécution (ST1,s1) (ST2,s2) (ST3,s3)
- Une séquence détats dexécution (pile mémoire)
43Environnement
- Environnement E
- Correspondance entre identificateurs et variables
- Un ensemble de paires X x
- Identificateur X, variable en mémoire x
- Exemple dun environnement
- EX x, Y y
- E(X)x
- E(Y)y
44Lenvironnementpendant lexécution
- Prenons une instruction(E0) local X Y in
(E1) X2 Y3 local X in (E2) XYY Br
owse X end (E3) end - E0Browse bE1X x1, Y y, Browse
bE2X x2, Y y, Browse bE3E1
45Résumé
46Résumé
- Les structures de données
- Tuples et enregistrements
- Il na que les enregistrements dans le langage
noyau - Les arbres
- Opérations sur les arbres binaires ordonnés
- Limportance et la difficulté de maintenir les
conditions globales - Introduction à la sémantique