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 month ago
by
paul.albuquer
Browse files
Options
Downloads
Patches
Plain Diff
rephrased few things and corrected typos
parent
28b435fa
Branches
Branches containing commit
No related tags found
No related merge requests found
Pipeline
#38886
passed
1 month 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"
date
:
"
2025-03-28"
---
---
...
@@ -398,8 +398,8 @@ graph TD;
...
@@ -398,8 +398,8 @@ graph TD;
1.
On supprime comme pour un arbre binaire de recherche.
1.
On supprime comme pour un arbre binaire de recherche.
2.
Si un nœud est déséquilibré, on le rééquilibre.
2.
Si un nœud est déséquilibré, on le rééquilibre.
*
Cette opération peut déséquilibrer un autre nœud.
*
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.
3.
On continue à rééquilibrer tant qu'il y a des nœuds à équilibrer
en remontant le chemin
.
# Les arbres quaternaires
# Les arbres quaternaires
...
@@ -432,7 +432,7 @@ Son équivalent tri-dimensionnel est l'octree (chaque nœud a 8 enfants ou aucun
...
@@ -432,7 +432,7 @@ Son équivalent tri-dimensionnel est l'octree (chaque nœud a 8 enfants ou aucun
*
Indexation spatiale.
*
Indexation spatiale.
*
Détection de collisions.
*
Détection de collisions.
*
Simulation de galaxies
,
Barnes-Hut.
*
Simulation de galaxies
(algorithme de
Barnes-Hut
)
.
# Exemple de compression
# Exemple de compression
...
@@ -479,7 +479,7 @@ Image 64 pixels, arbre 25 nœuds.
...
@@ -479,7 +479,7 @@ Image 64 pixels, arbre 25 nœuds.
struct
node
struct
node
info
info
node
sup_gauche
,
sup_droit
,
node
sup_gauche
,
sup_droit
,
inf_gauche
,
inf_droit
inf_gauche
,
inf_droit
```
```


...
@@ -524,7 +524,7 @@ struct _node {
...
@@ -524,7 +524,7 @@ struct _node {
bool
est_feuille
(
noeud
)
bool
est_feuille
(
noeud
)
retourne
retourne
est_vide
(
sup_gauche
(
noeud
))
&&
est_vide
(
sup_gauche
(
noeud
))
&&
est_vide
(
sup_droit
(
noeud
))
&&
est_vide
(
sup_droit
(
noeud
))
&&
est_vide
(
inf_gauche
(
noeud
))
&&
est_vide
(
inf_gauche
(
noeud
))
&&
est_vide
(
inf_droit
(
noeud
))
est_vide
(
inf_droit
(
noeud
))
```
```
...
@@ -569,11 +569,11 @@ bool is_leaf(node *tree) {
...
@@ -569,11 +569,11 @@ bool is_leaf(node *tree) {
# Problème à résoudre
# Problème à résoudre
*
Construire un arbre quaternaire à partir d'une image:
*
Construire un arbre quaternaire à partir d'une image:
*
Créer l'arbre (allouer la mémoire pour tous les nœuds)
,
*
Créer l'arbre (allouer la mémoire pour tous les nœuds)
*
Le r
emplir avec les valeurs des pixels
.
*
R
emplir
l'arbre
avec les valeurs des pixels
*
Compression de l'image:
*
Compression de l'image:
*
Si les pixels sont les mêmes dans le quadrant on supprime le sous-arbre (sans perte)
*
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
# Création de l'arbre
...
@@ -697,7 +697,7 @@ int depth(node *qt) {
...
@@ -697,7 +697,7 @@ int depth(node *qt) {
# Fonctions utiles (2/4)
# 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?
*
Comment?
::: columns
::: columns
...
@@ -824,7 +824,7 @@ noeud position(li, co, arbre)
...
@@ -824,7 +824,7 @@ noeud position(li, co, arbre)
. . .
. . .
```
C
```
C
arbre matrice_
à
_arbre(matrice)
arbre matrice_
vers
_arbre(matrice)
arbre = creer_arbre(profondeur)
arbre = creer_arbre(profondeur)
pour li de 0 à nb_lignes(matrice)
pour li de 0 à nb_lignes(matrice)
pour co de 0 à nb_colonnes(matrice)
pour co de 0 à nb_colonnes(matrice)
...
@@ -842,11 +842,10 @@ arbre matrice_à_arbre(matrice)
...
@@ -842,11 +842,10 @@ arbre matrice_à_arbre(matrice)
\f
ootnotesize
\f
ootnotesize
```
C
```
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);
node *qt = qt_create(depth);
for (int li = 0; li < n
d
_li; ++li) {
for (int li = 0; li < n
b
_li; ++li) {
for (int co = 0; co < n
d
_co; ++co) {
for (int co = 0; co < n
b
_co; ++co) {
node *current = position(li, co, qt);
node *current = position(li, co, qt);
current->info = matrix[li][co];
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)
...
@@ -863,7 +862,7 @@ node *matrix_to_qt(int nb_li, int nb_co, int matrix[nb_li][nb_co], int depth)
. . .
. . .
```
C
```
C
matrice arbre_
à
_matrice(arbre)
matrice arbre_
vers
_matrice(arbre)
matrice = creer_matrice(nb_lignes(arbre), nb_colonnes(arbre))
matrice = creer_matrice(nb_lignes(arbre), nb_colonnes(arbre))
pour li de 0 à nb_lignes(matrice)
pour li de 0 à nb_lignes(matrice)
pour co de 0 à nb_colonnes(matrice)
pour co de 0 à nb_colonnes(matrice)
...
@@ -881,13 +880,14 @@ matrice arbre_à_matrice(arbre)
...
@@ -881,13 +880,14 @@ matrice arbre_à_matrice(arbre)
\f
ootnotesize
\f
ootnotesize
```
C
```
C
void qt_to_matrix(node *qt, int nb_li, int nb_co, int matrix[nb_li][nb_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
d
_li; ++li) {
for (int li = 0; li < n
b
_li; ++li) {
for (int co = 0; co < n
d
_co; ++co) {
for (int co = 0; co < n
b
_co; ++co) {
node *current = position(li, co, qt);
node *current = position(li, co, qt);
matrix[li][co] = current->info;
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