Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
cours
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
algorithmique
cours
Commits
93b0bf1d
Commit
93b0bf1d
authored
1 week ago
by
paul.albuquer
Browse files
Options
Downloads
Patches
Plain Diff
rephrased few things and corrected typos
parent
28b435fa
No related branches found
No related tags found
No related merge requests found
Pipeline
#38886
passed
1 week ago
Stage: test
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
slides/cours_19.md
+19
-19
19 additions, 19 deletions
slides/cours_19.md
with
19 additions
and
19 deletions
slides/cours_19.md
+
19
−
19
View file @
93b0bf1d
---
title
:
"
Arbres
AVL
et
A
rbres
quaternaires"
title
:
"
Arbres
AVL
et
a
rbres
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 r
emplir avec les valeurs des pixels
.
*
Créer l'arbre (allouer la mémoire pour tous les nœuds)
*
R
emplir
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 transf
ormer un
e ligne/colonne e
n
feuille.
*
On veut transf
érer la valeur d'une cas
e ligne/colonne
dans un
e 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)
\f
ootnotesize
```
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 < n
d
_li; ++li) {
for (int co = 0; co < n
d
_co; ++co) {
for (int li = 0; li < n
b
_li; ++li) {
for (int co = 0; co < n
b
_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)
\f
ootnotesize
```
C
void qt_to_matrix(node *qt, int nb_li, int nb_co, int matrix[nb_li][nb_co])
for (int li = 0; li < n
d
_li; ++li) {
for (int co = 0; co < n
d
_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 < n
b
_li; ++li) {
for (int co = 0; co < n
b
_co; ++co) {
node *current = position(li, co, qt);
matrix[li][co] = current->info;
}
}
}
```
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment