> **Thème** : Parcours de graphes et théorie des réseaux sociaux
---
## Contexte
En 2026, les réseaux sociaux connectent des milliards de personnes. TikTok, Instagram, LinkedIn... Mais saviez-vous que vous êtes probablement relié(e) à n'importe quelle célébrité par seulement **6 intermédiaires** ?
C'est la théorie des **"Six degrés de séparation"**, popularisée par le jeu **"Six Degrees of Kevin Bacon"** : tout acteur d'Hollywood peut être relié à Kevin Bacon en moins de 6 films.
Dans ce TP, vous allez explorer cette théorie en utilisant les **algorithmes de parcours de graphes**.
---
## Partie 1 : Comprendre le problème
### Le nombre de Bacon
Le **nombre de Bacon** d'un acteur est la distance minimale (en nombre de films) qui le sépare de Kevin Bacon.
- Kevin Bacon a un nombre de Bacon de **0**
- Un acteur qui a joué avec Kevin Bacon a un nombre de Bacon de **1**
- Un acteur qui a joué avec quelqu'un qui a joué avec Kevin Bacon a un nombre de Bacon de **2**
- Et ainsi de suite...
### Exemple
```
Tom Hanks ──[Apollo 13]── Kevin Bacon
→ Nombre de Bacon = 1
Natalie Portman ──[Heat]── Robert De Niro ──[Sleepers]── Kevin Bacon
→ Nombre de Bacon = 2
```
### Questions préliminaires
1. Si un acteur A a joué avec un acteur B, quelle est la relation entre eux dans un graphe ?
2. Quel algorithme de parcours permet de trouver le **plus court chemin** entre deux sommets ?
3. Pourquoi BFS est-il préférable à DFS pour ce problème ?
---
## Partie 2 : Modélisation du problème
### Le graphe des acteurs
Nous allons modéliser Hollywood comme un graphe où :
- Chaque **sommet** représente un acteur
- Chaque **arête** relie deux acteurs qui ont joué dans le même film
Créez un graphe représentant les relations d'amitié dans votre classe (ou un réseau fictif) et calculez :
1. Qui est le "Kevin Bacon" de la classe (la personne la plus centrale) ?
2. Quel est le diamètre du graphe (la plus grande distance entre deux personnes) ?
3. Y a-t-il des personnes isolées ?
```python
def centralite(graphe):
"""
Trouve la personne la plus centrale du graphe
(celle qui minimise la somme des distances aux autres).
"""
# À compléter...
pass
def diametre(graphe):
"""
Calcule le diamètre du graphe
(la plus grande distance entre deux sommets connectés).
"""
# À compléter...
pass
```
---
## Partie 6 : Réflexion
### Questions de synthèse
1.**Six degrés de séparation** : Pourquoi pensez-vous que le nombre 6 revient souvent dans les réseaux sociaux réels ?
2.**Croissance des connexions** : Si chaque personne connaît en moyenne 100 personnes, combien de personnes peut-on atteindre en 2, 3, puis 6 étapes ? (Ordre de grandeur)
3.**Limites du modèle** : Notre graphe est non pondéré. Comment pourrait-on le modifier pour tenir compte de la "force" des liens (amis proches vs simples connaissances) ?
4.**Application réelle** : Citez une application concrète de ces algorithmes dans un réseau social moderne (LinkedIn, Facebook, etc.).
### Débat : La centralité du pouvoir
Dans un réseau social, les personnes très centrales ont un "pouvoir" particulier : elles peuvent diffuser rapidement une information à tout le réseau.
- Est-ce un avantage ou un danger pour la société ?
- Comment les plateformes comme TikTok ou Instagram utilisent-elles cette notion de centralité ?
---
## Bonus : Oracle de Bacon en ligne
Le site [The Oracle of Bacon](https://oracleofbacon.org/) permet de calculer le nombre de Bacon de n'importe quel acteur dans une base de données de millions de films.
Testez avec vos acteurs préférés !
**Question bonus** : L'acteur moyen a un nombre de Bacon d'environ 2.9. Qu'est-ce que cela nous dit sur la structure du réseau des acteurs d'Hollywood ?
---
## Résumé des notions
| Concept | Application dans ce TP |
|---------|------------------------|
| Graphe non orienté | Réseau d'acteurs |
| Sommet | Un acteur |
| Arête | Deux acteurs ont joué ensemble |
| BFS | Calcul du plus court chemin |
| Distance | Nombre de Bacon |
| Centralité | L'acteur le plus "connecté" |
| Diamètre | La plus grande distance dans le graphe |
---
## Annexe : Solution de l'exercice 1
<details>
<summary>Cliquez pour afficher</summary>
```python
from itertools import combinations
def construire_graphe_acteurs(films):
graphe = {}
for film, acteurs in films.items():
# Créer les sommets si nécessaire
for acteur in acteurs:
if acteur not in graphe:
graphe[acteur] = set()
# Créer les arêtes (toutes les paires d'acteurs)
for a1, a2 in combinations(acteurs, 2):
graphe[a1].add(a2)
graphe[a2].add(a1)
# Convertir les sets en listes
return {k: list(v) for k, v in graphe.items()}
```
</details>
---
Auteur : Florian Mathieu
Licence CC BY NC
<arel="license"href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><imgalt="Licence Creative Commons"style="border-width:0"src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"/></a><br/>Ce cours est mis à disposition selon les termes de la <arel="license"href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.