edit et corrections d'erreurs factuelles, de calculs et de mise en page
This commit is contained in:
@@ -43,7 +43,9 @@ def bfs(graphe, depart):
|
||||
|
||||
### Illustration du parcours en largeur
|
||||
|
||||

|
||||

|
||||
|
||||
*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. C’est une approche de type pile (LIFO).
|
||||
|
||||
#### Algorithme DFS :
|
||||
1. Choisir un sommet de départ et l’empiler.
|
||||
2. Marquer ce sommet comme visité.
|
||||
3. Tant que la pile n’est 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
|
||||
|
||||

|
||||

|
||||
|
||||
*Source : [gaudry.be](https://www.gaudry.be/)*
|
||||
|
||||
----------
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user