edit et corrections d'erreurs factuelles, de calculs et de mise en page

This commit is contained in:
2026-07-02 15:01:24 +02:00
parent 3067e1918e
commit 28d4a75c1b
32 changed files with 174 additions and 109 deletions

View File

@@ -43,7 +43,9 @@ def bfs(graphe, depart):
### Illustration du parcours en largeur
![parcours_largeur.gif](https://glassus.github.io/terminale_nsi/T1_Structures_de_donnees/1.4_Graphes/data/bfs.gif)
![parcours_largeur.gif](assets/bfs.gif)
*Source : [Gilles Lassus](https://glassus.github.io/terminale_nsi/)*
@@ -53,12 +55,11 @@ def bfs(graphe, depart):
Le parcours en profondeur explore un chemin le plus loin possible avant de revenir en arrière. Cest une approche de type pile (LIFO).
#### Algorithme DFS :
1. Choisir un sommet de départ et lempiler.
2. Marquer ce sommet comme visi.
3. Tant que la pile nest pas vide :
- Retirer le sommet du sommet de la pile.
- Ajouter tous ses voisins non encore visités dans la pile et les marquer comme visités.
#### Algorithme DFS (version récursive) :
1. Marquer le sommet courant comme visité.
2. Pour chaque voisin non encore visité, relancer le parcours depuis ce voisin.
> On peut aussi écrire DFS de manière itérative avec une pile explicite (en remplaçant la file du BFS par une pile). Dans la version récursive ci-dessous, c'est la **pile d'appels** de Python qui joue ce rôle : chaque appel récursif "empile" un sommet, chaque retour le "dépile".
#### Implémentation en Python :
```python
@@ -78,7 +79,9 @@ def dfs(graphe, depart, visite=None):
### Illustration
![Parcours_Profondeur](https://www.gaudry.be/img/math/graphe/graphes-dfs.gif)
![Parcours_Profondeur](assets/dfs.gif)
*Source : [gaudry.be](https://www.gaudry.be/)*
----------

View File

@@ -184,6 +184,39 @@ A = np.matrix(A)
Ecrire la matrice d'adjacence du réseau social de l'introduction
### Liste d'adjacence
La matrice n'est pas la seule représentation possible. On peut aussi associer à chaque sommet la **liste de ses voisins** (ou de ses **successeurs** dans le cas d'un graphe orienté). En Python, un dictionnaire est parfait pour cela :
```python
adjacence = {
'A': ['B', 'C', 'E'],
'B': ['A', 'C', 'D'],
'C': ['A', 'B', 'D'],
'D': ['B', 'C'],
'E': ['A']
}
```
C'est cette représentation que nous utiliserons pour les parcours (voir [PARCOURS.md](PARCOURS.md)) et l'implémentation en POO (voir [POO.md](POO.md)).
**Quelle représentation choisir ?**
| | Matrice d'adjacence | Liste d'adjacence |
|---|---|---|
| Tester si deux sommets sont voisins | Immédiat (une case) | Parcours de la liste |
| Mémoire | n × n cases, même si peu d'arêtes | Proportionnelle au nombre d'arêtes |
| Usage naturel | Graphes denses (beaucoup d'arêtes) | Graphes creux (peu d'arêtes) |
### Exercice 3:
Le programme officiel demande de savoir **passer d'une représentation à l'autre**.
1. Écrire à la main la liste d'adjacence correspondant à la matrice de l'exemple du cours.
2. Écrire une fonction `matrice_vers_liste(matrice, sommets)` qui prend la matrice (liste de listes) et la liste des noms de sommets, et renvoie le dictionnaire d'adjacence.
3. Écrire la fonction inverse `liste_vers_matrice(adjacence, sommets)`.
4. Vérifier vos deux fonctions : `matrice_vers_liste` suivie de `liste_vers_matrice` doit redonner la matrice de départ.