Master 1, Bio Informatique : TD 3 du 10 février : Parcours en largeur, graphes aléatoires. Exercice 1 Question 1. Ecrire l'algorithme de recherche en largeur, l'appliquer au graphe suivant : graph1 = {1:[2,5,7], 2:[3,5], 3:[2], 4:[1,8,10], 5:[4,6], 6:[7,9], 7:[3,8], 8:[9], 9:[3,4], 10:[2] } Appliquer l'algorithme de recherche de chemin utilisant la recherche en largeur an de trouver le chemin traversant le moins d'états, ceci pour aller de la Californie à la Floride dans le graphe des Etats Unis. Question 2. Exercice 2 Ecrire en Python l'algorithme de Warshal vu en cours. Pour cela vous partirez d'un graphe graph de n sommets numérotés de 0 à n − 1. Vous construirez une matrice mat sous forme d'un dictionnaire de n lignes et n colonnes qui ne contient que des 100. Mettez à 0 les termes de la diagonale (mat[i][i]). Donnez la valeur 1 à mat[i][j] s'il existe un arc dans graph d'origine i et d'extremité j Pour chaque sommet x0 examinez tous les couples x,y et regradez si le plus court chemin trouvé entre x et y est plus long que la somme des longeurs du chemins entre x et x0 et de celui entre x0 et y. Si tel est le cas modier la valeur de la distance entre x et y par cette somme. Question 1. Question 2. Appliquer cet algorithme au graphe suivant : graph1 = {0:[3,7,6], 1:[2,5,7], 2:[3,5], 3:[2], 1 4:[1,8,10], 5:[4,6], 6:[7,9,0], 7:[3,8], 8:[9], 9:[3,4], 10:[2,0] } Exercice 3 On se propose de construire un graphe non orienté au hasard. Pour cela on se donne le nombre n de sommets du graphe et un nombre ottant p compris entre 0 et 1. Ensuite pour tout couple i, j tels que 0 <= i < j < n on ajoute au graphe une arête entre i et j avec une probabilité p. Pour cela on tire au hasard un nombre x ottant compris entre 0 et 1 en utilisant la fonction : x = random.random() et on ajoute l'arête si x est inférieur à p. Question 1. Ecrire la fonction : def ajout(i, j, g): d'ajout d'arête entre i et j dans le graphe g Question 2. Ecrire la fonction de création def graphAlea(n, proba): d'un graphe aléatoire de n sommets avec la probabilité p de construire une arête. Ecrire une fonction qui teste si un graphe est connexe en utilisant la recherche en largeur. Tester pour n = 100 quelle est la plus petite valeur de p qui permet d'avoir presque toujours un graphe connexe. Question 3. Ecrire une fonction qui calcule le diamètre d'un graphe en utilisant l'algorithme de Warshal. Déterminer les valeurs moyennes du diamètre pour n = 100 et p = 0, 15. Question 4. 2