Structures de données Flashcards
Pile (implémentation avec liste)
type 'a pile = {mutable contenu : 'a list};; exception Empty ;; let creerPile () = {contenu = []} ;; let estVide s = s.contenu = [];; let push x s = s.contenu ← x::(s.contenu);; let pop s = match s.contenu with |[] -> raise Empty |t::q -> s.contenu ← q; t;;
let a = creerPile ();;
File (implémentation par vecteurs circulaires)
let tmax = 50;; exception Empty;; type 'a file = {mutable contenu : 'a array; mutable deb : int ; mutable fin : int} ;; let creerFile elt = {contenu = Array.make tmax elt; deb = 0; fin = 0};; let estVide f = f.fin = f.deb;; let push f x = f.contenu.(f.fin) ← x; f.fin ← f.fin + 1 ;; let pop f = if estVide f then raise Empty else f.deb ← f.deb + 1; f.contenu.(f.deb - 1);;
let f = creerFile 0;;
Arité d’un sommet, profondeur d’un sommet et hauteur d’un arbre
Arité : nombre de fils d’un sommet
Profondeur : nombre d’arcs le séparant de la racine
Hauteur : plus grande profondeur atteinte
1) Nombre de branches d’un arbre à n sommets
2) Nombre de feuilles d’un arbre binaire à n nœuds
3) Nombre de feuilles d’un arbre d’arité k à n nœuds
1) n-1 branches
2) n+1 feuilles
3) n(k-1) + 1 feuilles
1) Hauteur h d’un arbre dont les n nœuds sont de degré ≤ 2
2) Hauteur h d’un arbre dont les n nœuds sont de degré ≤ k
3) Relation entre le nombre f de feuilles et la hauteur h d’un arbre binaire
1) ln (n+1) ≤ h ≤ n <=> h ≤ n ≤ 2^h - 1
2) h ≤ n ≤ (k^h - 1) / k-1
3) h < f ≤ 2^h <=> ln f ≤ h < f
Définition d’un arbre binaire :
1) strictement équilibré
2) complet
3) équilibré
1) Strictement équilibré : toutes ses feuilles ont pour profondeur sa hauteur h ou h-1 (tous les étages sont complets sauf le dernier)
2) Complet : toutes ses feuilles sont à la profondeur h (tous les étages sont complets)
3) Équilibré : les hauteurs des arbres fils gauche et fils droit de tout sommet diffèrent au plus de 1
Lien entre le nombre de nœuds n et la hauteur h dans un arbre binaire strictement équilibré. Cas de l’arbre complet.
2^(h-1) ≤ n ≤ 2^h - 1
Donc h ∽ ln n
Pour un arbre complet : n = 2^h - 1
Lien entre le nombre de nœuds n et la hauteur h dans un arbre binaire équilibré.
Φ^h - 2 ≤ n ≤ 2^h - 1
où Φ = (1 + √5) / 2
Nombre d’arbres binaires squelettiques à n nœuds
(n parmi 2n) / (n+1)
Parcours en profondeur d’un arbre
Conventions possibles pour le traitement des nœuds et des feuilles
On démarre de la racine, puis on visite entièrement chaque sous-arbre le plus à gauche restant, puis entièrement le droit.
Ordre préfixe : père avant fils (pgd pour arbre binaire)
Ordre postfixe : père après fils (gdp pour arbre binaire)
Ordre infixe (pour arbre binaire) : gpd
Parcours en largeur d’un arbre
Visite des sommets par ordre croissant de profondeur, de gauche à droite à profondeur égale.