Adloun

Corrigé CCINP 2025 Informatique MP — Partie III (2) (Q18 à Q25) : Algorithme de Borůvka

Sujet officiel du concours CCINP, session 2025, épreuve Informatique MP. Corrigé rédigé par Ibrahim Alame.

Sujet officiel (PDF, site du concours)

Énoncé

est connexe, de pondération injective, et est son unique arbre couvrant de poids maximal (partie II). Soient un sous-graphe acyclique de et une composante connexe de . Une arête est sûre pour si elle a exactement une extrémité dans et un poids maximal parmi les arêtes de ayant exactement une extrémité dans . Si n'est pas connexe, chaque composante a exactement une arête sûre, et une même arête peut être sûre pour deux composantes.

Figure 4 du sujet : un sous-graphe à quatre composantes (arêtes de en trait plein, autres arêtes de en pointillés). Pour , les arêtes sortantes ont pour poids : l'arête de poids est sûre, et elle l'est aussi pour .

Q18. Donner l'arête sûre de et celle de .
Q19. Si , montrer que contient les arêtes sûres de toutes les composantes de .

Algorithme 1 (Borůvka) : partir de ; tant que n'est pas connexe, ajouter à toutes les arêtes sûres de ses composantes. On renvoie .

Q20. Dérouler l'algorithme 1 sur le graphe de la figure 2 (toutes les arêtes de la figure 4) : à chaque étape, l'arête sûre de chaque composante et l'ensemble des arêtes ajoutées.
Q21. Montrer que l'algorithme termine.
Q22. Montrer qu'il renvoie .

Le sujet donne (avec les fonctions de Q10 à Q17), pour h acyclique non connexe :


let aretes_sures g h =
  let c = composantes_connexes h in
  let p = max_tab c + 1 in
  let aretes = toutes_les_aretes g in
  let sures = Array.make p (min_arete aretes) in
  let traite a =
    let (_, i, j) = a in
    if c.(i) <> c.(j) then begin
      sures.(c.(i)) <- max a sures.(c.(i));
      sures.(c.(j)) <- max a sures.(c.(j));
    end
  in
  List.iter traite aretes;
  sures

Q23. Type de cette fonction ; ce qu'elle calcule (structure et contenu du résultat) ; complexité en fonction de , sachant que .

On dispose de ajoute_aretes_sures : graphe -> (float * int * int) array -> unit, en , qui ajoute à h les arêtes du tableau renvoyé par aretes_sures g h, chacune une seule fois.

Q24. Écrire borukva : graphe -> graphe, qui renvoie l'arbre couvrant de poids maximal.
Q25. (a) Montrer qu'à chaque tour de boucle le nombre de composantes de est au moins divisé par . (b) En déduire la complexité dans le pire cas. (c) Quelle est la complexité dans le meilleur cas ?

Corrigé

Q18. Composante : les arêtes issues de ont pour poids (vers ), (vers ) et (vers ). L'arête sûre est , de poids .

Composante : l'arête (poids ) a ses deux extrémités dans la composante, elle ne compte pas. Les arêtes sortantes sont (), (), () et () : l'arête sûre est , de poids (et non l'arête de poids , confusion signalée par le jury).

Q19. Soit une composante de (avec , sinon il n'y a pas d'arête sûre) et son arête sûre, avec , . Elle existe : étant connexe, un chemin de relie un sommet de à un sommet hors de , et l'une de ses arêtes a exactement une extrémité dans . Supposons par l'absurde .

D'après Q7(a), possède un cycle, qui contient (l'arbre n'a pas de cycle). Écrivons-le : le chemin va de à et n'emprunte que des arêtes du cycle autres que , donc des arêtes de . Soit le premier indice tel que (on a car ) : l'arête a exactement une extrémité dans , appartient à et au cycle, et . Comme est sûre et injective, .

D'après Q7(b), est un arbre couvrant de , de poids : c'est absurde. Donc , et ce pour chaque composante de . L'argument d'échange n'a utilisé de que le fait d'être un ensemble de sommets distinct de (c'est la « propriété de coupure » des arbres couvrants) ; l'hypothèse est celle dont on disposera en Q22.

Q20. Les poids désignent les arêtes (ils sont distincts).

Étape 1. n'a aucune arête : neuf composantes, réduites à un sommet. L'arête sûre de chaque sommet est son arête de poids maximal :

Arêtes ajoutées : . Composantes : , , , .

Étape 2.

Arêtes ajoutées : . Composantes : et .

Étape 3. Les arêtes entre les deux composantes ont pour poids : l'arête () est sûre pour les deux. On l'ajoute ; est connexe et l'algorithme s'arrête.

100 % gratuit

La suite du corrigé est sur Adloun

Le corrigé rédigé en entier, question par question, et le tuteur pour poser des questions sur ce sujet.

Voir le corrigé complet, gratuitement

Inscription gratuite en 30 secondes (e-mail, nom d'utilisateur, mot de passe, classe ou profil), sans carte bancaire : arrivée directe sur le corrigé.

Toutes les parties de l'épreuve

Corrigé complet gratuit →