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
7ad83607
Commit
7ad83607
authored
1 month ago
by
paul.albuquer
Browse files
Options
Downloads
Patches
Plain Diff
Corrected typos in binary tree part
parent
471f0334
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Pipeline
#38084
passed
1 month ago
Stage: test
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
slides/cours_15.md
+50
-51
50 additions, 51 deletions
slides/cours_15.md
with
50 additions
and
51 deletions
slides/cours_15.md
+
50
−
51
View file @
7ad83607
...
...
@@ -227,15 +227,15 @@ void hm_print(hm h);
## Plus sérieusement
*
Ensemble de
**nœuds**
et d'
**arêtes**
(graphe)
,
*
Ensemble de
**nœuds**
et d'
**arêtes**
(graphe)
.
*
Les arêtes relient les nœuds entre eux, mais pas n'importe comment: chaque
nœud a au plus un
**parent**
,
*
Le seul nœud sans parent est la
**racine**
,
*
Chaque nœud a un nombre fini d'
**enfants**
,
nœud a au plus un
**parent**
.
*
Le seul nœud sans parent est la
**racine**
.
*
Chaque nœud a un nombre fini d'
**enfants**
.
*
La hiérarchie des nœuds rend les arêtes
**orientées**
(parent -> enfants), et empêche les
**cycles**
(acyclique, orienté).
*
La
**feuille**
ou
**nœud terminal**
est un nœud sans enfants
,
*
Le
**niveau**
est 1 à la racine et
**niveau+1**
pour les enfants
,
*
La
**feuille**
ou
**nœud terminal**
est un nœud sans enfants
.
*
Le
**niveau**
est 1 à la racine et
**niveau+1**
pour les enfants
.
*
Le
**degré**
d'un nœud est le nombre de enfants du nœud.
. . .
...
...
@@ -363,11 +363,11 @@ graph TD;
:::
*
Les nœuds de degré 0
,
sont des feuilles.
*
Les nœuds de degré 0 sont des feuilles.
# Application: recherche rapide
## Pouvez
vous construire un arbre pour résoudre le nombre secret?
## Pouvez
-
vous construire un arbre pour résoudre le nombre secret?
. . .
...
...
@@ -399,7 +399,7 @@ graph LR;
:::
# Autres représentation
# Autres représentation
s
*
Botanique
*
**Exercice:**
Ajouter les degrés/niveaux et feuilles
...
...
@@ -418,7 +418,7 @@ graph TD;
H-->K;
```
# Autres représentation
# Autres représentation
s
*
Ensembliste
...
...
@@ -448,7 +448,7 @@ graph TD;
:::
# Autres représentation
# Autres représentation
s
*
Liste
...
...
@@ -541,11 +541,11 @@ A
# L'arbre binaire
*
Structure de données abstraite
,
*
Chaque nœud a au plus deux enfants: gauche et droite
,
*
Chaque enfant
s
est un arbre.
*
Structure de données abstraite
.
*
Chaque nœud a au plus deux enfants: gauche et droite
.
*
Chaque enfant est un arbre.
## Comment représenteriez
vous une telle structure?
## Comment représenteriez
-
vous une telle structure?
. . .
...
...
@@ -583,7 +583,7 @@ typedef struct _node {
## Interface minimale
*
Qu'y mettriez
vous?
*
Qu'y mettriez
-
vous?
. . .
...
...
@@ -627,7 +627,7 @@ graph TD;
## Remarques
*
L'arbre est
**hétérogène**
: le genre d'info est pas le même sur chaque nœud
*
L'arbre est
**hétérogène**
: le genre d'info
n'
est pas le même sur chaque nœud
(opérateur, opérande).
*
Les feuilles contiennent les opérandes.
*
Les nœuds internes contiennent les opérateurs.
...
...
@@ -638,14 +638,13 @@ graph TD;
# Parcours d'arbres binaires
*
Appliquer une opération à tous les nœuds de l'arbre,
*
Nécessité de
**parcourir**
l'arbre,
*
Utiliser uniquement l'interface: visiter, gauche,
droite.
*
Appliquer une opération à tous les nœuds de l'arbre:
*
Nécessité de
**parcourir**
l'arbre.
*
Utiliser uniquement l'interface: visiter, gauche, droite
## Une idée de comment parcourir cet arbre?
*
3 parcours (R:
R
acine, G: sous-arbre gauche, D: sous-arbre droit):
*
3 parcours (R:
r
acine, G: sous-arbre gauche, D: sous-arbre droit):
::: columns
...
...
@@ -679,16 +678,16 @@ graph TD;
# Le parcours infixe (G, R, D)
*
Gauche, Racine, Droite:
1.
On descend dans l'arbre de gauche tant qu'il est pas vide
,
2.
On visite la racine du sous
arbre
,
3.
On descend dans le sous-arbre de droite (s'il est pas vide)
,
1.
On descend dans l'arbre de gauche tant qu'il
n'
est pas vide
.
2.
On visite la racine du sous
-
arbre
.
3.
On descend dans le sous-arbre de droite (s'il
n'
est pas vide)
.
4.
On recommence.
. . .
## Incompréhensible?
*
La récursivité c'est la vie.
*
La récursivité
,
c'est la vie.
```
parcours_infixe(arbre a)
...
...
@@ -723,11 +722,11 @@ graph TD;
```
parcours_infixe(arbre a)
si est_pas_vide(gauche(a))
parcours_infixe(gauche(a))
visiter(A)
si est_pas_vide(droite(A))
parcours_infixe(droite(A))
si est_pas_vide(gauche(a))
parcours_infixe(gauche(a))
visiter(A)
si est_pas_vide(droite(A))
parcours_infixe(droite(A))
```
::::
...
...
@@ -774,11 +773,11 @@ graph TD;
```
parcours_infixe(arbre a)
si est_pas_vide(gauche(a))
parcours_infixe(gauche(a))
visiter(A)
si est_pas_vide(droite(A))
parcours_infixe(droite(A))
si est_pas_vide(gauche(a))
parcours_infixe(gauche(a))
visiter(A)
si est_pas_vide(droite(A))
parcours_infixe(droite(A))
```
## Remarque
...
...
@@ -843,18 +842,17 @@ void tree_print(tree_t tree, int n) {
```
parcours_infixe(arbre a)
si est_pas_vide(gauche(a))
parcours_infixe(gauche(a))
parcours_infixe(gauche(a))
visiter(A)
si est_pas_vide(droite(A))
parcours_infixe(droite(A))
parcours_infixe(droite(A))
```
# Correction
\f
ootnotesize
*
Les deux parcours sont des modifications
**triviales**
[^2] de l'algorithme
infixe.
*
Les deux parcours sont des modifications
**triviales**
[^2] de l'algorithme infixe.
## Le parcours postfixe
...
...
@@ -970,7 +968,7 @@ sous-arbres de gauche et de droite.
```
python
arbre
recherche
(
clé
,
arbre
)
tant
e
_que
est_non_vide
(
arbre
)
tant_que
est_non_vide
(
arbre
)
si
clé
<
clé
(
arbre
)
arbre
=
gauche
(
arbre
)
sinon
si
clé
>
clé
(
arbre
)
...
...
@@ -997,9 +995,9 @@ typedef node* tree_t;
tree_t search(key_t key, tree_t tree) {
tree_t current = tree;
while (NULL != current) {
if (current->key >
X
) {
if (current->key >
key
) {
current = current->gauche;
} else if (current->key <
X
){
} else if (current->key <
key
){
current = current->droite;
} else {
return current;
...
...
@@ -1021,7 +1019,7 @@ qui retourne le nombre total de nœuds d'un arbre et poster le résultat sur
matrix.
Indication: la taille, est 1 + le nombre de nœuds du sous-arbre de gauche
additionné au nombre de nœuds d
ans le
sous-arbre de droite.
additionné au nombre de nœuds d
u
sous-arbre de droite.
. . .
...
...
@@ -1031,14 +1029,14 @@ int arbre_size(tree_t tree) {
return 0;
} else {
return 1 + tree_size(tree->left)
+ tree_size(tree->right);
+ tree_size(tree->right);
}
}
```
# 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....
## Pour un arbre lexicographique
...
...
@@ -1051,9 +1049,9 @@ int arbre_size(tree_t tree) {
*
Clés uniques pour simplifier.
*
Insertion de 5, 15, 10, 25, 2, -5, 12, 14, 11.
*
Rappel:
*
Plus petit que la clé courante => gauche,
*
Plus grand que la clé courante => droite.
*
Faisons le dessin
s
ensemble
*
Plus petit que la clé courante =>
à
gauche,
*
Plus grand que la clé courante =>
à
droite.
*
Faisons le dessin ensemble
```
...
...
@@ -1128,8 +1126,9 @@ ajout(arbre, clé)
tree_t position(tree_t tree, key_t key) {
tree_t current = tree;
if (NULL != current) {
tree_t subtree = key > current->key ? current->right :
current->left;
tree_t subtree
= key > current->key
? current->right : current->left;
while (key != current->key && NULL != subtree) {
current = subtree;
subtree = key > current->key ? current->right :
...
...
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