Académique Documents
Professionnel Documents
Culture Documents
Code barre :
1
Agrégation Informatique Juillet 2019 Informatique fondamentale et programmation
1. Ecrivez la fonction EstValideIPv6(adIP) qui prend en paramètre une chaine de caractères contenant
une adresse IPv6 et qui permet de vérifier si cette adresse est valide (retourne True) ou non (retourne
False).
Pour réduire la taille d’une adresse, les zéros leaders (les zéros non significatifs) peuvent être omis. Les
règles visant à simplifier l’écriture d’une adresse IPV6 sont:
Tout d’abord, on remplace les groupes :0000: par :0:
Puis Pour compresser encore ces adresses on enlève les zéros qui commencent un groupe. Par
exemple le bloc :00ed: sera remplacé par :ed:
Exemple :
fe80:0000:0000:0000:00ed:04ef:fe50:0020
Après la simplification on a :
fe80:0:0:0:ed:4ef:fe50:20
2. Ecrivez la fonction SimplifierIPv6 (adIP) qui prend en paramètre une chaine de caractères contenant
une adresse IPv6 et qui permet de simplifier cette adresse.
Pour compresser encore ces adresses, on remplace la première suite de zéros consécutifs (deux ou plus)
de langueur maximale par ::
Exemple 1: Exemple 2: Exemple 3 :
fe80 :0:0:0:ed:0:0:0 0:0:0:0:0:0:0:1 fe80:0:0:3D:0:0:0:0
Après la compression sera : Après la compression sera: A près la compression sera :
fe80::ed:0:0:0 ::1 fe80:0:0:3d ::
3. Ecrivez la fonction suiteZeros(adIP) qui prend en paramètre une chaine de caractères contenant une
adresse IPv6 et qui retourne les indices du début et de la fin la première suite de zéros consécutifs de
langueur maximale (voir l’exemple ci-dessous).
Exemple : suiteZeros("fe80 :0:0:0:ed:0:0:0") [5, 9], suiteZeros("0:0:0:0:0:0:0:1") [0, 12].
4. Ecrivez la fonction CompresserIPv6(adIP) qui prend en paramètre une chaine de caractères contenant
une adresse IPv6 et qui permet de compresser cette adresse.
5. Ecrivez la fonction DecompresserIPv6(adIP) qui prend en paramètre une chaine de caractères
contenant une adresse IPv6 et qui permet de décompresser une adresse IPv6 compressée.
2
Agrégation Informatique Juillet 2019 Informatique fondamentale et programmation
i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 i a b
j ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ j ↓ ↓
0→ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1→ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2→ 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 c→ 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
3→ 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
4→ 0 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0
5→ 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
6→ 0 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0
7→ 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0
8→ 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0
9→ 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0
10→ 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0
11→ 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0
12→ 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0
13→ 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0
14→ 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 d→0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0
15→ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16→ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17→ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Figure 1 Figure 2
Partie 1 : Centrage du contenu de la matrice (6 points)
Dans cette partie, nous nous intéressons à la détermination de la sous matrice de taille minimale contenant
l’ensemble des valeurs 1. Notons cette sous matrice par SMA (voir figure 2).
En commençant à partir de l’origine (0,0) :
a: est l’indice de la première colonne contenant au moins une valeur 1.
b: est l’indice de la dernière colonne contenant au moins une valeur 1.
c: est l’indice de la première ligne contenant au moins une valeur 1.
d: est l’indice de la dernière ligne contenant au moins une valeur 1.
6. Ecrivez la fonction indice_a(A) qui prend en paramètre une matrice binaire et retourne la valeur de a.
7. Ecrivez la fonction indice_b(A) qui prend en paramètre une matrice binaire et retourne la valeur de b.
8. Ecrivez la fonction indice_c(A) qui prend en paramètre une matrice binaire et retourne la valeur de c.
9. Ecrivez la fonction indice_d(A) qui prend en paramètre une matrice binaire et retourne la valeur de d.
10. Ecrivez la fonction indice_abcd(A) qui prend en paramètre une matrice binaire et retourne une liste
contenant les valeurs a, b, c et d. La fonction doit calculer les valeurs a, b, c et d en un seul parcours
de A.
Afin de centrer le contenu le la matrice (les valeurs non nulles), nous proposons de faire une translation de
la sous matrice SMA de telle sorte qu'elle soit au centre de la matrice mère A. (voir la figure 3 page 4).
Pour centrer le contenu de la matrice, nous proposons de procéder comme suit :
i) Calculer les valeurs des indices a, b, c et d,
ii) Calculer les coordonnées du centre de la sous matrice SMA,
iii) Calculer le décalage nécessaire (dx, dy) pour coïncider le centre de SMA avec le centre de la
matrice à centrer,
iv) Déplacer la sous matrice SMA au centre de la matrice à centrer (vous pouvez utiliser une matrice
auxiliaire) en décalant chaque valeur par dx, dy.
3
Agrégation Informatique Juillet 2019 Informatique fondamentale et programmation
11. Ecrivez la fonction centre(a, b, c, d) qui prend en paramètre les indices a, b, c et d et retourne une liste
contenant les coordonnées du centre de la sous matrice SMA.
12. Ecrivez la fonction centrer(A) qui prend en paramètre une matrice binaire et qui permet de centrer son
contenu en utilisant l’algorithme décrit ci-dessus.
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 11 1 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Figure 3
Partie 2 : distance entre deux matrices binaires (8 points)
Les opérateurs étudiés dans cette partie prennent en compte l’information portée par les valeurs voisines
de la valeur traitée. Deux cases de la grille (autrement dit deux valeurs de la matrice) d’indices (i1, j1) et
(i2, j2) sont voisines si |i1-i2|≤1 et |j1-j2|≤1.
Une fonction adhérence sur une partie A de Z2 peut être définie de la façon suivante :
a(E)={xA, V(x) E ≠Ø}
avec V désigne l’ensemble formé de point x et de ses voisins. E désigne, dans notre cas, l’ensemble des
points dont la valeur égale à 1 (cases noires). Cette opération permet d’étendre la partie contenant les
valeurs 1 à sa frontière. Autrement dit :
a(E)=les cases noires + les cases blanches dont le voisinage contient au moins une case noire.
Exemple :
Matrice initiale Adhérence = Cases noires + cases Résultat de l’adhérence
de leurs frontières
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 1 1 1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 01 1 1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 01 1 1 1 1 1 1 0 0 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 0 01 1 1 1 1 1 1 0 1 1 1 1 1 1 0
0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 01 1 1 1 1 1 1 1 1 1 1 1 1 1 0
0 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 01 1 1 1 1 1 1 1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 00 1 1 1 1 1 1 1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 1 1 11 1 0 0 0 0 0 0 0 0 0 0 0 1 1 11 1 0 0 0 0 00 0 0 0 1 1 1 1 11 1 1 1 0 0
0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 00 0 0 1 1 1 1 1 1 1 1 1 0 0 0
0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 00 0 1 1 1 1 1 1 1 1 1 0 0 0 0
0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 00 0 1 1 1 1 1 1 1 1 1 1 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 00 0 1 1 1 1 1 1 1 1 1 1 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 00 0 1 1 1 1 1 1 1 1 1 1 0 0 0
0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 00 0 1 1 1 1 1 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 1 1 1 1 1 1 1 1 0 0 0 0
Figure 4
4
Agrégation Informatique Juillet 2019 Informatique fondamentale et programmation
13. Ecrivez la fonction inclusDansAdherence(A, i, j) qui retourne True si le voisinage de la case dont les
coordonnées qui sont passées en paramètre contient au moins une case noire, ou False sinon.
14. Ecrivez la fonction adherence(A) qui prend en paramètre une matrice binaire et qui permet de dilater
l’ensemble des formes contenant les valeurs 1.
On définit l’intérieur sur une partie A de Z2 par i(E)={xA, V(x) E}.
avec V désigne l’ensemble formé de point x et de ses voisins. E désigne, dans notre cas, l’ensemble des
points dont la valeur égale à 1 (cases noires). Cette opération permet d’éroder la partie contenant les
valeurs 1. Autrement dit, l’intérieur d’un sous ensemble E d’une partie A (dans notre cas, l’ensemble des
cases noires) est toutes les cases de E dont le voisinage inclus dans E. (voir la figure 5 page suivante)
Matrice initiale Les cases qui vont être érodées : Résultat de l’érosion= intérieur
Cases noires qui ne respectent pas le critère i(E)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 00 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 00 0 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 00 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 00 0 0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 1 1 11 1 0 0 0 0 0 0 0 0 0 0 0 1 1 11 1 0 0 0 0 00 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 00 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 00 0 0 0 0 1 1 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 00 0 0 0 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 00 0 0 0 0 1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Figure 5
15. Ecrivez la fonction inclusDansErode(A, i, j) qui retourne True si le voisinage d’une case, dont les
coordonnées qui sont passées en paramètre, ne contient que des cases noires (autrement dit les valeurs
1), ou False sinon.
16. Ecrivez la fonction interieur(A) qui prend en paramètre une matrice binaire et qui permet d’éroder
l’ensemble des parties contenant les valeurs 1.
Nous définissons la pseudo-distance entre deux matrices binaires par :
5
Agrégation Informatique Juillet 2019 Informatique fondamentale et programmation
Figure 6
L’étiquetage en composantes connexes (ECC) est une opération qui consiste à identifier chaque
composante connexe de manière unique par une étiquette. Puisque les valeurs 0 et 1 sont déjà utilisées
dans la matrice, la première étiquette qu’on va utiliser est 2 et les composantes connexes seront
numérotées 2, 3 … (voir figure 6).
L’algorithme d’ECC parcourt la matrice à étiqueter ligne par ligne et valeur par valeur. À chaque valeur x
de la matrice, il évalue le voisinage à la recherche des étiquettes existantes (cases du voisinage qui sont
déjà étiquetées).
Selon le nombre N d’étiquettes présentes dans le voisinage, il agit différemment :
Cas 1 : N = 0 la case courante reçoit une nouvelle étiquette.
Cas 2 : N = 1 la case courante reçoit la valeur de cette étiquette (aucune action sur la table
d’équivalence).
Cas 3 : N > 1 l’algorithme affecte la valeur de la plus petite étiquette, notons cette étiquette par et,
à la case courante et met à jour la table d’équivalence associée aux étiquettes de voisinage (voir la
suite pour la mise à jour de la table d’équivalence).
Au fur et à mesure du parcours de la matrice, l’algorithme construit une table appelée table d’équivalence
qui représente les connexions existantes entre les différentes étiquettes temporaires. La mise à jour de la
table d’équivalence (appelée aussi fermeture transitive) se fait comme suit :
Si une nouvelle étiquette est créée (cas 1), alors elle sera ajoutée à la table d’équivalence,
Sinon si le nombre d’étiquettes dans le voisinage est supérieur à 1 (cas 3) alors
PPE la valeur de la plus petite étiquette du voisinage
Pour toute étiquette et voisinage,
Tant que T[et-2] ≠ et faire #propagation des étiquettes jusqu’à ce que T[et-2] =et.
aux T[et-2] ;
T[et-2] PPE ;
etaux
Fin Tant que
T[et-2] PPE
6
Agrégation Informatique Juillet 2019 Informatique fondamentale et programmation
20. Ecrivez la fonction etiquettesV(A, i, j) qui retourne la liste des étiquettes du voisinage. La fonction doit
retourner une liste vide si aucune des cases du voisinage n’est pas encore étiquetée (voir l’exemple).
Exemple
2 2 0 0 3
Si A= 0 0 0 0 3 alors etiquettesV(A, 3, 1) [4,5].
4 0 5 0 3
0 1 0 1 0
2 2 0 0 3
0 0 0 0 3
Si A= alors etiquettesV (A, 2, 2) []
4 0 1 0 3
0 1 0 1 0
Exemple d’étiquetage: case noire =1, case blanche = 0, case grise = case déjà étiquetée.
Cas2 Cas1
Cas1 Cas 1 Cas 2
2 2 2 2 2 3 2 2 3 2 2 3
3 3
4
2 2 2 3 2 3 2 3 4
Cas1 Cas 2 Cas 3 Cas 3
2 2 3 2 2 3 2 2 3 2 2 3
3 3 3 3 Table d’équivalence
4 5 4 5 3 4 5 3 4 5 3
4 4 3
2 3 4 5 2 3 4 5 2 3 4 4 2 3 3 3
21. Ecrivez la procédure fermeture(T, et, PPE) qui prend en paramètre la table d’équivalence T et deux
étiquettes et et PPE et qui permet de mettre à jour l’étiquette et par l’étiquette PPE et de propager
l’étiquette PPE en utilisant le principe expliqué précédemment. Si et=PPE et PPE ne figure pas dans
la table T, alors elle sera ajoutée.
22. Ecrivez la fonction passage1(A) qui permet d’attribuer les étiquettes aux différentes cases de la
matrice A suivant l’algorithme décrit au-dessus. La fonction doit retourner la table d’équivalence.
Une fois la dernière case de la matrice est traité, il restera à effectuer un ré-étiquetage de la matrice afin
d’obtenir une matrice étiquetée. Cette étape consiste à affecter à chaque case l’étiquette équivalente.
Exemple
Matrice A= 2 2 3 Résultat d’étiquetage après le deuxième passage
3 2 2 3
4 5 3 3
4 3 3 3 3
3 3
Table d’équivalence T = 2 3 3 3
23. Ecrivez la fonction passage2(A, T) qui prend en paramètre la matrice binaire A et la table
d’équivalence T et qui permet de ré-étiqueter la matrice A.
7
Agrégation Informatique Juillet 2019 Informatique fondamentale et programmation
Exemple :
8
Agrégation Informatique Juillet 2019 Informatique fondamentale et programmation
Exemple
Figure 7
29. Quelle est la caractéristique de la valeur minimale contenant dans l’arbre binaire de recherche en
termes de sa position dans l’arbre ?
30. Quelle est la caractéristique de la valeur maximale contenant dans l’arbre binaire de recherche en
termes de sa position dans l’arbre ?
31. Donnez les résultats (valeurs des clés) des parcours préfixe, infixe et postfixe de l’arbre de la figure 7?
Parcours préfixe :
……………………………………………………………
………………………………………………………………………………………………………………………..
……………………………………………………………………………………………………..
……………………………………………………………
………………………………………………………………………………………………………………………..
……………………………………………………………………………………………………..
……………………………………………………………
………………………………………………………………………………………………………………………..
……………………………………………………………………………………………………..
Parcours infixe :
……………………………………………………………
………………………………………………………………………………………………………………………..
……………………………………………………………………………………………………..
……………………………………………………………
………………………………………………………………………………………………………………………..
……………………………………………………………………………………………………..
……………………………………………………………
………………………………………………………………………………………………………………………..
……………………………………………………………………………………………………..
Parcours postfixe :
……………………………………………………………
………………………………………………………………………………………………………………………..
……………………………………………………………………………………………………..
……………………………………………………………
………………………………………………………………………………………………………………………..
……………………………………………………………………………………………………..
……………………………………………………………
…………………………………………………………………………………
……………………………………………………………………………………………………..
33. Écrivez la fonction itérative maximumABR(A) qui prend en paramètre un arbre binaire de recherche et
qui retourne la plus grande valeur entière s’il existe, la valeur nil sinon.
34. Donnez et justifier les complexités (pire des cas et meilleur des cas) de votre fonction
maximumABR(A) en fonction du nombre de nœuds n ou de la hauteur h de l’arbre A.
35. Ecrivez la fonction insererABR(A, cle) qui permet d’insérer la valeur cle dans l’arbre A. La fonction
doit retourner le nouveau ainsi obtenu.
****