Aller au contenu

Diamètre d'un Arbre

Deux BFS successifs — une astuce élégante

Exercice Intermédiaire · Graphes · prepa scientifique et economique (CPGE)

Enonce

Implémenter diametre(G) qui calcule le diamètre d'un arbre par la technique des deux BFS.

Tester sur quelques arbres : un chemin (le diamètre vaut $n - 1$), une étoile (diamètre $2$), et un arbre quelconque.

Signature attendue

def diametre(G: dict) -> int:

Exemple

  • diametre({0: [1], 1: [0, 2], 2: [1, 3], 3: [2, 4], 4: [3]}) → 4

📖 Rappel de cours

Le diamètre d'un arbre (ou plus généralement d'un graphe non orienté) est la plus longue des plus courtes distances entre deux sommets : $\text{diam}(G) = \max_{u, v} d(u, v)$.

Algorithme naïf :

BFS depuis chaque sommet et garder le maximum → $O(|V| \cdot (|V| + |E|))$.

Astuce des deux BFS (pour un arbre) :

  1. BFS depuis n'importe quel sommet $s$ → on note $u$ le sommet le plus éloigné
  2. BFS depuis $u$ → la distance maximale obtenue est le diamètre

Total : 2 BFS, donc $O(|V| + |E|)$ — drastiquement plus rapide.

Pourquoi ça marche :

Lemme : dans un arbre, le sommet le plus éloigné de n'importe quel sommet est toujours une extrémité d'un diamètre. La preuve repose sur l'unicité des chemins dans un arbre.

Attention : ce raccourci ne marche que pour les arbres (pas pour les graphes avec cycles).

← Exercices sur les graphes en Python — BFS, DFS, Dijkstra

Exercices du meme theme

  • Représentations d'un Graphe
  • Test de Bipartisme
  • Détection de Cycle (graphe orienté)
  • Algorithme de Floyd-Warshall
  • Composantes Fortement Connexes (Kosaraju)
  • Algorithme A* sur Grille

La correction commentee, les indices progressifs, l'execution du code dans le navigateur et la verification par l'IA sont reserves aux abonnes.

Prepa🐍ython
Progresser en Python & SQL · Prépa scientifique
Essai gratuit
Testez toutes les fonctionnalités sans engagement
En continuant, vous acceptez notre politique de confidentialité.
Déjà abonné ? Se reconnecter
Recevez un lien de connexion par email
Parcourir gratuitement →
Aperçu limité · sans inscription · sans vérification IA
€4,99
/ mois · accès illimité · résiliable
Paiement sécurisé
En vous abonnant, vous acceptez nos conditions et politique de confidentialité.
Résiliation possible depuis votre espace PayPal.

Chargement...

Initialisation de l'environnement

Prepa🐍ython
Progresser en Python & SQL · Prépa scientifique
Progression
0 / 0
Solo
— / —
Python... SQL...
Recherche
🔬 Bac a sable Python ↗ 🧪 Bac a sable SQL ↗ 📝 Concours blanc ↗ 🏖️ Code à la plage ↗ 📚 Listes de rentrée ↗ 🛠️ Admin ↗
Tu aimes PrepaPython ?
Fais-le savoir !
← Retour à l'accueil Mentions legales & confidentialite