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
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
algorithmique
cours
Commits
3218dceb
Commit
3218dceb
authored
4 months ago
by
paul.albuquer
Browse files
Options
Downloads
Patches
Plain Diff
Corrected typos
parent
dd1beedb
No related branches found
No related tags found
No related merge requests found
Pipeline
#38218
passed
4 months ago
Stage: test
Changes
1
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
slides/cours_16.md
+23
-24
23 additions, 24 deletions
slides/cours_16.md
with
23 additions
and
24 deletions
slides/cours_16.md
+
23
−
24
View file @
3218dceb
...
@@ -427,10 +427,10 @@ sous-arbres de gauche et de droite.
...
@@ -427,10 +427,10 @@ sous-arbres de gauche et de droite.
## Exemple: les arbres lexicographiques
## Exemple: les arbres lexicographiques
*
Chaque nœud contient une information de type ordonné, la
**clé**
,
*
Chaque nœud contient une information de type ordonné, la
**clé**
.
*
Par construction, pour chaque nœud $N$:
*
Par construction, pour chaque nœud $N$:
*
Toute
s
clé du sous-arbre à gauche de $N$ s
on
t inférieur
s
à la clé de $N$.
*
Toute clé du sous-arbre à gauche de $N$
e
st inférieur
e
à la clé de $N$.
*
Toute
s
clé du sous-arbre à droite de $N$ s
on
t inférieur
s
à la clé de $N$.
*
Toute clé du sous-arbre à droite de $N$
e
st inférieur
e
à la clé de $N$.
# Algorithme de recherche
# Algorithme de recherche
...
@@ -438,7 +438,7 @@ sous-arbres de gauche et de droite.
...
@@ -438,7 +438,7 @@ sous-arbres de gauche et de droite.
```
python
```
python
arbre
recherche
(
clé
,
arbre
)
arbre
recherche
(
clé
,
arbre
)
tant
e
_que
est_non_vide
(
arbre
)
tant_que
est_non_vide
(
arbre
)
si
clé
<
clé
(
arbre
)
si
clé
<
clé
(
arbre
)
arbre
=
gauche
(
arbre
)
arbre
=
gauche
(
arbre
)
sinon
si
clé
>
clé
(
arbre
)
sinon
si
clé
>
clé
(
arbre
)
...
@@ -464,10 +464,10 @@ typedef struct _node {
...
@@ -464,10 +464,10 @@ typedef struct _node {
node *search(key_t key, node *tree) {
node *search(key_t key, node *tree) {
node *current = tree;
node *current = tree;
while (NULL != current) {
while (NULL != current) {
if (current->key >
X
) {
if (current->key >
key
) {
current = current->
gauche
;
current = current->
left
;
} else if (current->key <
X
){
} else if (current->key <
key
){
current = current->
droite
;
current = current->
right
;
} else {
} else {
return current;
return current;
}
}
...
@@ -493,7 +493,7 @@ additionné au nombre de nœuds dans le sous-arbre de droite.
...
@@ -493,7 +493,7 @@ additionné au nombre de nœuds dans le sous-arbre de droite.
. . .
. . .
```
C
```
C
int
arbr
e_size(node *tree) {
int
tre
e_size(node *tree) {
if (NULL == tree) {
if (NULL == tree) {
return 0;
return 0;
} else {
} else {
...
@@ -505,7 +505,7 @@ int arbre_size(node *tree) {
...
@@ -505,7 +505,7 @@ int arbre_size(node *tree) {
# L'insertion dans un arbre binaire
# L'insertion dans un arbre binaire
*
C'est bien joli de pouvoir faire des parcours, recherches, mais si on peut
*
C'est bien joli de pouvoir faire des parcours, recherches, mais si on
ne
peut
pas construire l'arbre....
pas construire l'arbre....
## Pour un arbre lexicographique
## Pour un arbre lexicographique
...
@@ -594,12 +594,12 @@ ajout(arbre, clé)
...
@@ -594,12 +594,12 @@ ajout(arbre, clé)
node *position(node *tree, key_t key) {
node *position(node *tree, key_t key) {
node * current = tree;
node * current = tree;
if (NULL != current) {
if (NULL != current) {
node *subtree = key > current->key
? current->right :
node *subtree = key > current->key
current->left;
? current->right :
current->left;
while (key != current->key && NULL != subtree) {
while (key != current->key && NULL != subtree) {
current = subtree;
current = subtree;
subtree = key > current->key
? current->right :
subtree = key > current->key
current->left;
? current->right :
current->left;
}
}
}
}
return current;
return current;
...
@@ -672,7 +672,7 @@ node *add_key(node **tree, key_t key) {
...
@@ -672,7 +672,7 @@ node *add_key(node **tree, key_t key) {
## Cas simples:
## Cas simples:
*
le nœud est absent,
*
le nœud est absent,
*
le nœud est une feuille
*
le nœud est une feuille
,
*
le nœuds a un seul fils.
*
le nœuds a un seul fils.
## Une feuille (le 19 p.ex.).
## Une feuille (le 19 p.ex.).
...
@@ -721,7 +721,7 @@ flowchart TB;
...
@@ -721,7 +721,7 @@ flowchart TB;
## Cas compliqué
## Cas compliqué
*
Le nœud à supprimer
à
(au moins) deux descendants (10).
*
Le nœud à supprimer
a
(au moins) deux descendants (10).
```
{.mermaid format=pdf width=400 loc=figs/}
```
{.mermaid format=pdf width=400 loc=figs/}
flowchart TB;
flowchart TB;
...
@@ -739,19 +739,18 @@ flowchart TB;
...
@@ -739,19 +739,18 @@ flowchart TB;
:::: column
:::: column
*
Si on enlève 10 il se passe quoi?
*
Si on enlève 10
,
il se passe quoi?
. . .
. . .
*
On peut pas juste enlever
`10`
et recoller...
*
On
ne
peut pas juste enlever
`10`
et recoller...
*
Proposez une solution
bon sang
!
*
Proposez une solution !
. . .
. . .
## Solution
## Solution
*
Échange de la valeur à droite dans le sous-arbre de gauche ou
*
Échange de la valeur à droite dans le sous-arbre de gauche ou ...
...
*
de la valeur de gauche dans le sous-arbre de droite!
*
de la valeur de gauche dans le sous-arbre de droite!
*
Puis, on retire le nœud.
*
Puis, on retire le nœud.
...
@@ -826,7 +825,7 @@ arbre suppression(arbre, clé)
...
@@ -826,7 +825,7 @@ arbre suppression(arbre, clé)
sinon
sinon
gauche(parent) = droite(sous_arbre)
gauche(parent) = droite(sous_arbre)
sinon
sinon
si droite(parent) == sous_arbre
ou est_
si droite(parent) == sous_arbre
droite(parent) = gauche(sous_arbre)
droite(parent) = gauche(sous_arbre)
sinon
sinon
gauche(parent) = gauche(sous_arbre)
gauche(parent) = gauche(sous_arbre)
...
...
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