Algorithmes et structures de données avancées Cours 6 Patrick Reuter
Arbre binaire de recherche procedure nomducle(noeud : p_t_noeud; cle : integer); Max Nat Rol PoloTony
procedure nomducle(noeud : p_t_noeud; cle : integer); begin if (noeud = NIL) then WriteLn('existe pas') else if (noeud^.cle = cle) then WriteLn('Solution ', noeud^.nom) else if (noeud^.cle > cle) then nomducle(noeud^.gauche, cle) else nomducle(noeud^.droite, cle); end; Complexité ??
Les graphes Un graphe G = (V,E) un couple de deux ensembles –Un ensemble V(G) = {v 1, v 2, …, v n } de sommets (anglais : one vertex, two vertices) –Un ensemble E(G) V x V darêtes (anglais : edges)
Définitions Orientation : –les graphes non orientés –les graphes orientés degré boucle parité (sommets pairs et impairs) adjacence, voisin et voisinage sommet isolé sous-graphe, clique Graphe régulier Graphe complet Isomorphisme Chaîne, chaîne simple, cycle Connexité Stockage des graphes
Matrice dadjacence Pour des graphes orientés et non-orientés Soit G = (V,E) avec V = {v 1, v 2, …, v n } La matrice dadjacence A est une matrice quadratique binaire de taille n x n avec A i,k = 1 si (v i, v k ) E, A i,k = 0 sinon La matrice dadjacence dun graphe non orienté est symétrique Suivant lordre des nœuds, il y a plusieurs matrice dadjacence du même graphe
Exemple A = v1v2 v3 v4 v5 de à
Algorithmes sur les graphes Comment trouver une chaîne entre s et t ? Comment savoir si un graphe est connexe ? Comment savoir si un graphe est eulérien ? …
Graphe de contacts Comment montrer les contacts des contacts des contacts … Patrick Pierre Clémentine Jérôme Petra Luc Axl
Définir une structure de données graphe dadjacence Définir un tableau contenant des étiquettes pour chaque sommet
Etape 1 : montrer les contacts directs Entrée : Graphe G définie par une matrice dadjacence A et un sommet s défini par son indice procedure montrerContacts(s : integer) début pour i de 1 à nbSommets(G) si (i s ET A[s][i]=1) alors afficher nom[i] à lécran; fin si fin pour fin { Montrer les conacts directs }
Définir un tableau contenant un indicateur si un sommet a déjà été visité
Etape 2 : montrer les contacts et les contacts des contacts Entrée : Graphe G définie par une matrice dadjacence A et un sommet s défini par son indice procedure montrerContacts(s : integer) Début marquerSommet(s); pour i de 1 à nbSommets(G) si (i s ET A[s][i]=1 ET NOT marqué(i)) alors afficher nom[i] à lécran fin si fin pour fin { Montrer les contacts directs et les contacts des contacts directs }
Etape 2 : montrer les contacts et les contacts des contacts Entrée : Graphe G définie par une matrice dadjacence A et un sommet s défini par son indice procedure montrerContacts(s : integer) Début marquerSommet(s); pour i de 1 à nbSommets(G) si (i s ET A[s][i]=1 ET NOT marqué(i)) alors afficher nom[i] à lécran marquerSommet(i); pour j de 1 à nbSommets(G) si (j s ET A[i][j]=1 ET NOT marqué(j)) alors marquerSommet(j); afficher nom[j] à lécran fin si fin pour fin si fin pour fin { Montrer les contacts directs et les contacts des contacts directs }
Etape 3 : Reconnaître la récursivité Entrée : Graphe G définie par une matrice dadjacence A et un sommet s défini par son indice procedure montrerContacts(s : integer) Début marquerSommet(s); pour i de 1 à nbSommets(G) si (i s ET A[s][i]=1 ET NOT marqué(i)) alors afficher nom[i] à lécran marquerSommet(i); pour j de 1 à nbSommets(G) si (j s ET A[s][j]=1 ET NOT marqué(j)) alors marquerSommet(j); afficher nom[j] à lécran fin si fin pour fin si fin pour fin { Montrer les contacts directs et les contacts des contacts directs }
Etape 4 : Récursivité Entrée : Graphe G définie par une matrice dadjacence A et un sommet s défini par son indice procedure montrerContacts(s : integer) Début marquerSommet(s); pour i de 1 à nbSommets(G) si (i s ET A[s][i]=1 ET NOT marqué(i)) alors afficher nom[i] à lécran montrerContacts(i); fin si fin pour fin { Montrer les conacts directs et les contacts des contacts directs }
Vérification des deux conditions dun algorithme récursif La fonction est appelé par elle-même La fonction est protégé par une condition pour ne pas sappeler infiniment –Quand tous les sommets voisins dun sommet sont marqués, la fonction nest plus appelée.