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
a3539480
Commit
a3539480
authored
2 months ago
by
paul.albuquer
Browse files
Options
Downloads
Patches
Plain Diff
Rephrased few things arbre => tree
parent
77e03ea2
No related branches found
No related tags found
No related merge requests found
Pipeline
#38369
passed
2 months ago
Stage: test
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
slides/cours_17.md
+68
-68
68 additions, 68 deletions
slides/cours_17.md
with
68 additions
and
68 deletions
slides/cours_17.md
+
68
−
68
View file @
a3539480
...
...
@@ -21,20 +21,20 @@ date: "2025-03-14"
## Recherche du parent
```
tre
e position(
arbr
e, clé)
si est_non_vide(
arbr
e)
si clé < clé(
arbr
e)
suivant = gauche(
arbr
e)
arbr
e position(
tre
e, clé)
si est_non_vide(
tre
e)
si clé < clé(
tre
e)
suivant = gauche(
tre
e)
sinon
suivant = droite(
arbr
e)
tant que clé(
arbr
e) != clé && est_non_vide(suivant)
arbr
e = suivant
si clé < clé(
arbr
e)
suivant = gauche(
arbr
e)
suivant = droite(
tre
e)
tant que clé(
tre
e) != clé && est_non_vide(suivant)
tre
e = suivant
si clé < clé(
tre
e)
suivant = gauche(
tre
e)
sinon
suivant = droite(
arbr
e)
suivant = droite(
tre
e)
retourne
arbre
retourne
suivant
```
# Pseudo-code d'insertion (2/4)
...
...
@@ -46,14 +46,14 @@ tree position(arbre, clé)
## Ajout de l'enfant
```
rien ajout(
arbr
e, clé)
si est_vide(
arbr
e)
arbr
e = nœud(clé)
rien ajout(
tre
e, clé)
si est_vide(
tre
e)
tre
e = nœud(clé)
sinon
si clé < clé(
arbr
e)
gauche(
arbr
e) = nœud(clé)
sinon si clé > clé(
arbr
e)
droite(
arbr
e) = nœud(clé)
si clé < clé(
tre
e)
gauche(
tre
e) = nœud(clé)
sinon si clé > clé(
tre
e)
droite(
tre
e) = nœud(clé)
sinon
retourne
```
...
...
@@ -89,15 +89,15 @@ node *position(node *tree, key_t key) {
## Ajout du fils (pseudo-code)
```
rien ajout(
arbr
e, clé)
si est_vide(
arbr
e)
arbr
e = nœud(clé)
rien ajout(
tre
e, clé)
si est_vide(
tre
e)
tre
e = nœud(clé)
sinon
arbr
e = position(
arbr
e, clé)
si clé < clé(
arbr
e)
gauche(
arbr
e) = nœud(clé)
sinon si clé > clé(
arbr
e)
droite(
arbr
e) = nœud(clé)
tre
e = position(
tre
e, clé)
si clé < clé(
tre
e)
gauche(
tre
e) = nœud(clé)
sinon si clé > clé(
tre
e)
droite(
tre
e) = nœud(clé)
sinon
retourne
```
...
...
@@ -242,21 +242,21 @@ flowchart TB;
## Pour une feuille ou absent (ensemble)
```
tre
e suppression(
arbr
e, clé)
s
ous_arbr
e = position(
arbr
e, clé)
si est_vide(s
ous_arbr
e) ou clé(s
ous_arbr
e) != clé
arbr
e suppression(
tre
e, clé)
s
ub_tre
e = position(
tre
e, clé)
si est_vide(s
ub_tre
e) ou clé(s
ub_tre
e) != clé
retourne vide
sinon
si est_feuille(s
ous_arbr
e) et clé(s
ous_arbr
e) == clé
nouvelle_feuille = parent(
arbre, sous_arbr
e)
si est_feuille(s
ub_tre
e) et clé(s
ub_tre
e) == clé
nouvelle_feuille = parent(
tree, sub_tre
e)
si est_vide(nouvelle_feuille)
arbre = vide
sinon
si gauche(nouvelle_feuille) == s
ous_arb
re
si gauche(nouvelle_feuille) == s
ub_t
re
e
gauche(nouvelle_feuille) = vide
sinon
droite(nouvelle_feuille) = vide
retourne s
ous_arb
re
retourne s
ub_t
re
e
```
# Il nous manque le code pour le `parent`
...
...
@@ -266,11 +266,11 @@ tree suppression(arbre, clé)
. . .
```
tre
e parent(
arb
re, s
ous_arbr
e)
si est_non_vide(
arbr
e)
actuel =
arbr
e
arbr
e parent(
t
re
e
, s
ub_tre
e)
si est_non_vide(
tre
e)
actuel =
tre
e
parent = actuel
clé = clé(s
ous_arbr
e)
clé = clé(s
ub_tre
e)
faire
si (clé != clé(actuel))
parent = actuel
...
...
@@ -280,7 +280,7 @@ tree parent(arbre, sous_arbre)
actuel = droite(actuel)
sinon
retour parent
tant_que (actuel != s
ous_arbr
e)
tant_que (actuel != s
ub_tre
e)
retourne vide
```
...
...
@@ -293,21 +293,21 @@ tree parent(arbre, sous_arbre)
. . .
```
tre
e suppression(
arbr
e, clé)
s
ous_arbr
e = position(
arbr
e, clé)
si est_vide(gauche(s
ous_arbr
e)) ou est_vide(droite(s
ous_arbr
e))
parent = parent(
arbre, sous_arbr
e)
si est_vide(gauche(s
ous_arbr
e))
si droite(parent) == s
ous_arb
re
droite(parent) = droite(s
ous_arbr
e)
arbr
e suppression(
tre
e, clé)
s
ub_tre
e = position(
tre
e, clé)
si est_vide(gauche(s
ub_tre
e)) ou est_vide(droite(s
ub_tre
e))
parent = parent(
tree, sub_tre
e)
si est_vide(gauche(s
ub_tre
e))
si droite(parent) == s
ub_t
re
e
droite(parent) = droite(s
ub_tre
e)
sinon
gauche(parent) = droite(s
ous_arbr
e)
gauche(parent) = droite(s
ub_tre
e)
sinon
si droite(parent) == s
ous_arb
re
droite(parent) = gauche(s
ous_arbr
e)
si droite(parent) == s
ub_t
re
e
droite(parent) = gauche(s
ub_tre
e)
sinon
gauche(parent) = gauche(s
ous_arbr
e)
retourne s
ous_arb
re
gauche(parent) = gauche(s
ub_tre
e)
retourne s
ub_t
re
e
```
...
...
@@ -318,12 +318,12 @@ tree suppression(arbre, clé)
## Pour au moins deux enfants (ensemble)
```
tre
e suppression(
arbr
e, clé)
s
ous_arbr
e = position(
arbr
e, clé) # on revérifie pas que c'est bien la clé
si est_non_vide(gauche(s
ous_arbr
e)) et est_non_vide(droite(s
ous_arbr
e))
max_gauche = position(gauche(s
ous_arbr
e), clé)
échange(clé(max_gauche), clé(s
ous_arbr
e))
suppression(gauche(s
ous_arbr
e), clé)
arbr
e suppression(
tre
e, clé)
s
ub_tre
e = position(
tre
e, clé) # on
ne
revérifie pas que c'est bien la clé
si est_non_vide(gauche(s
ub_tre
e)) et est_non_vide(droite(s
ub_tre
e))
max_gauche = position(gauche(s
ub_tre
e), clé)
échange(clé(max_gauche), clé(s
ub_tre
e))
suppression(gauche(s
ub_tre
e), clé)
```
# Exercices (poster sur matrix)
...
...
@@ -333,15 +333,15 @@ tree suppression(arbre, clé)
. . .
```
tre
e insertion(
arbr
e, clé)
si est_vide(
arbr
e)
arbr
e insertion(
tre
e, clé)
si est_vide(
tre
e)
retourne nœud(clé)
si (clé <
arbre->
clé)
gauche(
arbr
e) = insert(gauche(
arbr
e), clé)
si (clé <
tree(
clé)
)
gauche(
tre
e) = insert(gauche(
tre
e), clé)
sinon
droite(
arbr
e) = insert(droite(
arbr
e), clé)
retourne
arbr
e
droite(
tre
e) = insert(droite(
tre
e), clé)
retourne
tre
e
```
# Exercices (poster sur matrix)
...
...
@@ -351,15 +351,15 @@ tree insertion(arbre, clé)
. . .
```
booléen recherche(
arbr
e, clé)
si est_vide(
arbr
e)
booléen recherche(
tre
e, clé)
si est_vide(
tre
e)
retourne faux // pas trouvée
si clé(
arbr
e) == clé
si clé(
tre
e) == clé
retourne vrai // trouvée
si clé < clé(
arbr
e)
retourne recherche(gauche(
arbr
e), clé)
si clé < clé(
tre
e)
retourne recherche(gauche(
tre
e), clé)
sinon
retourne recherche(droite(
arbr
e), clé)
retourne recherche(droite(
tre
e), clé)
```
# Exercices (à la maison)
...
...
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