TD 3: Parcours en largeur, graphes aléatoires

publicité
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
Téléchargement