$$ \gdef\block#1#2#3#4#5{ \begin{aligned} &\texttt{#1 } #4 \texttt{ #2} \\ &\enspace \left#3 \enspace \begin{aligned} #5 \end{aligned} \right. \end{aligned} } \gdef\if#1#2{\block{si}{alors}{|}{#1}{#2}} \gdef\eif#1#2{\block{si}{alors}{\lfloor}{#1}{#2}} \gdef\elif#1#2{\block{sinon si}{alors}{|}{#1}{#2}} \gdef\eelif#1#2{\block{sinon si}{alors}{\lfloor}{#1}{#2}} \gdef\else#1{\block{sinon}{}{\lfloor}{}{#1}} \gdef\for#1#2{\block{pour}{faire}{\lfloor}{#1}{#2}} \gdef\foreach#1#2{\block{pour tout}{faire}{\lfloor}{#1}{#2}} $$

TD AAIA

Cours Sujet

Exercice 2

Un groupe de neuf scouts partent camper dans la montagne. Ils communiquent en morse, avec leurs lampes de poche, mais les configurations du terrain font que :

  • Arthur ne peut communiquer qu’avec Babar et Donald ;
  • Babar ne peut communiquer qu’avec Arthur et Fernand ;
  • Céleste ne peut communiquer qu’avec Fernand ;- Donald ne peut communiquer qu’avec Arthur et Gontran ;
  • Ernestine ne peut communiquer qu’avec Fernand, Gontran et Isidore ;
  • Fernand ne peut communiquer qu’avec Babar, Céleste, Ernestine et Isidore ;
  • Gontran ne peut communiquer qu’avec Donald, Ernestine et Hugo ;
  • Hugo ne peut communiquer qu’avec Gontran et Isidore ;
  • Isidore ne peut communiquer qu’avec Ernestine, Fernand et Hugo.

Afin d’être certains que tout le monde soit bien informé, ils ont convenu que tout scout recevant un message pour la première fois le retransmet instantanément à son tour. Arthur veut envoyer le message “Toujours prêt” à ses camarades. En supposant que l’envoi du message en morse prend une minute à chaque fois, Arthur souhaite savoir combien de temps il faudra pour que tout lemonde ait reçu son message, et qui seront les derniers informés.

  1. Définissez un graphe, et reformulez le problème en le ramenant à un problème vu en cours.
  2. Quel algorithme permet de résoudre ce problème ?
  3. Résolvez-le en détaillant les étapes dela résolution.

Question 1

On définit le graphe simple non orienté $G = (S, A)$, tel que :

$$S = \{ s \mid s \text{ est un scout} \}$$ $$A = \{ \{i, j\} \subseteq S \mid i \text{ peut communiquer directement avec } j \}$$

On cherche à définir la distance maximum entre Arthur et les autres membres ainsi que les derniers membres atteint.

La distance entre Arthur et les autres membres est définie par $\delta(A, s_k) = k \times \text{ nombre d’arêtes entre } A \text{ et } s_k$, car $G$ ne contient que des poids uniformes.

Nous cherchons donc : $$T = \underset{s_k \in S}{max~}{\delta(A, s_k)}$$ $$D = \{s_k \in S \mid \delta(A, s_k) = T \}$$


Question 2

Pour résoudre ce problème nous utilisons le parcours en largeur (en. Breadth First Search).

Précondition : Poids uniformes

Complexité : $\mathcal{O}(\mid S \mid + \mid A \mid)$


Question 3

Initialisation
// Loading

Nous noterons $\pi[s_k]$ le parent de $s_k$. $F$ est la file de traitement des noeuds.


Étape 1

Sélection du noeud A.

// Loading

$$ F = \{ A \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$NoneNoneNoneNoneNoneNoneNoneNone
$\delta(A, s_k)$$0$$+\infty$$+\infty$$+\infty$$+\infty$$+\infty$$+\infty$$+\infty$$+\infty$

Étape 2

Découverte du noeud B, mise à jour des tableaux et ajout dans la file.

// Loading

$$ F = \{ A, B \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$NoneNoneNoneNoneNoneNoneNone
$\delta(A, s_k)$$0$$1$$+\infty$$+\infty$$+\infty$$+\infty$$+\infty$$+\infty$$+\infty$

Étape 3

Découverte du noeud D, mise à jour des tableaux et ajout dans la file.

// Loading

$$ F = \{ A, B, D \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$None$A$NoneNoneNoneNoneNone
$\delta(A, s_k)$$0$$1$$+\infty$$1$$+\infty$$+\infty$$+\infty$$+\infty$$+\infty$

Étape 4

Le noeud A n’a plus de voisin, on le supprime de la file.

// Loading

$$ F = \{ B, D \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$None$A$NoneNoneNoneNoneNone
$\delta(A, s_k)$$0$$1$$+\infty$$1$$+\infty$$+\infty$$+\infty$$+\infty$$+\infty$

Étape 5

Sélection du noeud B.

// Loading

$$ F = \{ B, D \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$None$A$NoneNoneNoneNoneNone
$\delta(A, s_k)$$0$$1$$+\infty$$1$$+\infty$$+\infty$$+\infty$$+\infty$$+\infty$

Étape 6

Découverte du noeud F, mise à jour des tableaux et ajout dans la file.

// Loading

$$ F = \{ B, D, F \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$None$A$None$B$NoneNoneNone
$\delta(A, s_k)$$0$$1$$+\infty$$1$$+\infty$$2$$+\infty$$+\infty$$+\infty$

Étape 7

Le noeud B n’a plus de voisin, on le supprime de la file.

// Loading

$$ F = \{ D, F \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$None$A$None$B$NoneNoneNone
$\delta(A, s_k)$$0$$1$$+\infty$$1$$+\infty$$2$$+\infty$$+\infty$$+\infty$

Étape 8

Sélection du noeud D.

// Loading

$$ F = \{ D, F \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$None$A$None$B$NoneNoneNone
$\delta(A, s_k)$$0$$1$$+\infty$$1$$+\infty$$2$$+\infty$$+\infty$$+\infty$

Étape 9

Découverte du noeud G, mise à jour des tableaux et ajout dans la file.

// Loading

$$ F = \{ D, F, G \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$None$A$None$B$$D$NoneNone
$\delta(A, s_k)$$0$$1$$+\infty$$1$$+\infty$$2$$2$$+\infty$$+\infty$

Étape 10

Le noeud D n’a plus de voisin, on le supprime de la file.

// Loading

$$ F = \{ F, G \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$None$A$None$B$$D$NoneNone
$\delta(A, s_k)$$0$$1$$+\infty$$1$$+\infty$$2$$2$$+\infty$$+\infty$

Étape 11

Sélection du noeud F.

// Loading

$$ F = \{ F, G \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$None$A$None$B$$D$NoneNone
$\delta(A, s_k)$$0$$1$$+\infty$$1$$+\infty$$2$$2$$+\infty$$+\infty$

Étape 12

Découverte du noeud C, mise à jour des tableaux et ajout dans la file.

// Loading

$$ F = \{ F, G, C \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$None$B$$D$NoneNone
$\delta(A, s_k)$$0$$1$$3$$1$$+\infty$$2$$2$$+\infty$$+\infty$

Étape 13

Découverte du noeud E, mise à jour des tableaux et ajout dans la file.

// Loading

$$ F = \{ F, G, C, E \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$NoneNone
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$+\infty$$+\infty$

Étape 14

Découverte du noeud I, mise à jour des tableaux et ajout dans la file.

// Loading

$$ F = \{ F, G, C, E, I \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$None$F$
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$+\infty$$3$

Étape 15

Le noeud F n’a plus de voisin, on le supprime de la file.

// Loading

$$ F = \{ G, C, E, I \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$None$F$
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$+\infty$$3$

Étape 16

Sélection du noeud G.

// Loading

$$ F = \{ G, C, E, I \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$None$F$
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$+\infty$$3$

Étape 17

Découverte du noeud H, mise à jour des tableaux et ajout dans la file.

// Loading

$$ F = \{ G, C, E, I, H \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$$G$$F$
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$3$$3$

Étape 18

Le noeud G n’a plus de voisin, on le supprime de la file.

// Loading

$$ F = \{ C, E, I, H \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$$G$$F$
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$3$$3$

Étape 19

Sélection du noeud C.

// Loading

$$ F = \{ C, E, I, H \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$$G$$F$
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$3$$3$

Étape 20

Le noeud C n’a plus de voisin, on le supprime de la file.

// Loading

$$ F = \{ E, I, H \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$$G$$F$
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$3$$3$

Étape 21

Sélection du noeud E.

// Loading

$$ F = \{ E, I, H \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$$G$$F$
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$3$$3$

Étape 22

Le noeud E n’a plus de voisin, on le supprime de la file.

// Loading

$$ F = \{ I, H \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$$G$$F$
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$3$$3$

Étape 23

Sélection du noeud I.

// Loading

$$ F = \{ I, H \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$$G$$F$
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$3$$3$

Étape 24

Le noeud I n’a plus de voisin, on le supprime de la file.

// Loading

$$ F = \{ H \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$$G$$F$
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$3$$3$

Étape 25

Sélection du noeud H.

// Loading

$$ F = \{ H \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$$G$$F$
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$3$$3$

Étape 26

Le noeud H n’a plus de voisin, on le supprime de la file.

// Loading

$$ F = \{ \} $$

$A$$B$$C$$D$$E$$F$$G$$H$$I$
$\pi[s_k]$$A$$A$$F$$A$$F$$B$$D$$G$$F$
$\delta(A, s_k)$$0$$1$$3$$1$$3$$2$$2$$3$$3$

Fin

Nous avons : $$T = \underset{s_k \in S}{max~}{\delta(A, s_k)} = 3$$ $$D = \{s_k \in S \mid \delta(A, s_k) = T \} = \{ C, E, H, I \}$$

Les derniers informés sont Céleste, Ernestine, Hugo et Isidore.

Auteurs

Christine Solnon