Adloun

File de priorité de couples

Exercice · OCaml (option informatique), chapitre 19 — Files de priorité : le tas binaire

Énoncé

Pour Dijkstra, on a besoin d'une file de priorité de couples (distance, sommet) ordonnés par distance. Adapter le tas.

Corrigé

type tas_couples = { mutable taille : int; donnees : (int * int) array }

let cree_c capacite = { taille = 0; donnees = Array.make capacite (0, 0) }

let insere_c t x =
  let d = t.donnees in
  d.(t.taille) <- x; t.taille <- t.taille + 1;
  let i = ref (t.taille - 1) in
  while !i > 0 && fst d.((!i - 1) / 2) > fst d.(!i) do
    let p = (!i - 1) / 2 in
    let tmp = d.(!i) in d.(!i) <- d.(p); d.(p) <- tmp; i := p
  done

Tout est identique au tas d'entiers, mais on compare la première composante (fst, la distance) : le couple de plus petite distance remonte à la racine. extrait_min s'adapte de même (comparer par fst). On dispose alors d'une file de priorité « distance, sommet ».

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.