diff --git a/slides/cours_19.md b/slides/cours_19.md index b599cb9964052a0132ec9a0d1f2ead3e06b447d4..130d6e83d2a61c4b60bf32b17b2a9e40defdbac0 100644 --- a/slides/cours_19.md +++ b/slides/cours_19.md @@ -1,5 +1,5 @@ --- -title: "Arbres AVL et Arbres quaternaires" +title: "Arbres AVL et arbres quaternaires" date: "2025-03-28" --- @@ -398,8 +398,8 @@ graph TD; 1. On supprime comme pour un arbre binaire de recherche. 2. Si un nœud est déséquilibré, on le rééquilibre. - * Cette opération peut déséquilibrer un autre nœud. -3. On continue à rééquilibrer tant qu'il y a des nœuds à équilibrer. + * Cette opération peut déséquilibrer un autre nœud sur le chemin menant au noeud supprimé. +3. On continue à rééquilibrer tant qu'il y a des nœuds à équilibrer en remontant le chemin. # Les arbres quaternaires @@ -432,7 +432,7 @@ Son équivalent tri-dimensionnel est l'octree (chaque nœud a 8 enfants ou aucun * Indexation spatiale. * Détection de collisions. -* Simulation de galaxies, Barnes-Hut. +* Simulation de galaxies (algorithme de Barnes-Hut). # Exemple de compression @@ -479,7 +479,7 @@ Image 64 pixels, arbre 25 nœuds. struct node info node sup_gauche, sup_droit, - inf_gauche, inf_droit + inf_gauche, inf_droit ```  @@ -524,7 +524,7 @@ struct _node { bool est_feuille(noeud) retourne est_vide(sup_gauche(noeud)) && - est_vide(sup_droit(noeud)) && + est_vide(sup_droit(noeud)) && est_vide(inf_gauche(noeud)) && est_vide(inf_droit(noeud)) ``` @@ -569,11 +569,11 @@ bool is_leaf(node *tree) { # Problème à résoudre * Construire un arbre quaternaire à partir d'une image: - * Créer l'arbre (allouer la mémoire pour tous les nœuds), - * Le remplir avec les valeurs des pixels. + * Créer l'arbre (allouer la mémoire pour tous les nœuds) + * Remplir l'arbre avec les valeurs des pixels * Compression de l'image: * Si les pixels sont les mêmes dans le quadrant on supprime le sous-arbre (sans perte) - * Si les pixels dévient pas trop on supprime le quadrant (avec perte) + * Si les pixels ne dévient pas trop, on supprime le quadrant (avec perte) # Création de l'arbre @@ -697,7 +697,7 @@ int depth(node *qt) { # Fonctions utiles (2/4) -* On veut transformer une ligne/colonne en feuille. +* On veut transférer la valeur d'une case ligne/colonne dans une feuille. * Comment? ::: columns @@ -824,7 +824,7 @@ noeud position(li, co, arbre) . . . ```C -arbre matrice_à _arbre(matrice) +arbre matrice_vers_arbre(matrice) arbre = creer_arbre(profondeur) pour li de 0 à nb_lignes(matrice) pour co de 0 à nb_colonnes(matrice) @@ -842,11 +842,10 @@ arbre matrice_à _arbre(matrice) \footnotesize ```C -node *matrix_to_qt(int nb_li, int nb_co, int matrix[nb_li][nb_co], int depth) -{ +node *matrix_to_qt(int nb_li, int nb_co, int matrix[nb_li][nb_co], int depth) { node *qt = qt_create(depth); - for (int li = 0; li < nd_li; ++li) { - for (int co = 0; co < nd_co; ++co) { + for (int li = 0; li < nb_li; ++li) { + for (int co = 0; co < nb_co; ++co) { node *current = position(li, co, qt); current->info = matrix[li][co]; } @@ -863,7 +862,7 @@ node *matrix_to_qt(int nb_li, int nb_co, int matrix[nb_li][nb_co], int depth) . . . ```C -matrice arbre_à _matrice(arbre) +matrice arbre_vers_matrice(arbre) matrice = creer_matrice(nb_lignes(arbre), nb_colonnes(arbre)) pour li de 0 à nb_lignes(matrice) pour co de 0 à nb_colonnes(matrice) @@ -881,13 +880,14 @@ matrice arbre_à _matrice(arbre) \footnotesize ```C -void qt_to_matrix(node *qt, int nb_li, int nb_co, int matrix[nb_li][nb_co]) - for (int li = 0; li < nd_li; ++li) { - for (int co = 0; co < nd_co; ++co) { +void qt_to_matrix(node *qt, int nb_li, int nb_co, int matrix[nb_li][nb_co]) { + for (int li = 0; li < nb_li; ++li) { + for (int co = 0; co < nb_co; ++co) { node *current = position(li, co, qt); matrix[li][co] = current->info; } } +} ```