feuille de TD Structures de données avancées IAP 2014-2015
Nous avons vu en cours les fonctions lambda, ou anonymes. La valeur de l’expression :
lambda arguments :expression
est la même que la valeur qu’a fà la suite de la définition :
def f(arguments) :
return expression
Par exemple, la valeur de l’expression « lambda x, y : x + y » est la fonction addition.
a- Réécrivez les trois tests précédents en utilisant des formes lambda au lieu de définir les
fonctions f,pet g. Notez que ces trois fonctions sont disponibles dans la bibliothèque standard
de Python, sous les noms respectifs map,filter et reduce.
Exercice - 3Représentation des graphes
Un graphe orienté est déterminé par un ensemble de sommets et un ensemble d’arcs (ou flèches)
dont chacun met en relation deux sommets, appelés l’origine et l’extrémité de l’arc. A chaque
sommet est associée une information (un nombre, une chaîne, etc.), appelée l’étiquette du sommet,
qui est unique : deux sommets distincts n’ont pas la même étiquette.
Il est possible de représenter un graphe en Python par une liste d’arcs. Chaque couple (o, e)
représente un arc du sommet oau sommet e. La liste d’arcs suivante décrit le graphe ci-dessous :
[(’a’, ’b’), (’b’, ’a’), (’c’, ’a’), (’c’, ’d’), (’b’, ’c’),(’b’, ’d’), (’b’, ’e’), (’d’, ’e’) ]
1- Ecrivez les fonctions suivantes en prenant comme argument une liste d’arcs :
ensSommets(l_arcs), retourne l’ensemble (type set) des sommets du graphe
ensSuccesseurs(l_arcs, n), retourne l’ensemble des sommets si, tels qu’il existe un arc de nvers
si
ensPredecesseurs(l_arcs, n), retourne l’ensemble des sommets si, tels qu’il existe un arc de si
vers n
puits(l_arcs), retourne les sommets sans successeurs
sources(l_arcs), retourne les sommets sans prédécesseurs.
2- Testez soigneusement ces fonctions avec le graphe du dessus ainsi qu’avec le graphe suivant :
[(’a’, ’b’), (’a’, ’c’), (’d’, ’e’), (’f’, ’e’) ]
La phase de test est-elle une étape qui vous paraît importante ?
3- Étant donnés deux sommets depart et arrivee on souhaite afficher tous les chemins sans boucle
qui joignent le sommet depart au sommet arrivee. Un tel chemin sera représenté dans notre pro-
gramme par une suite de sommets : l’origine du chemin et les extrémités des arcs qui le composent.
Écrivez une fonction récursive chemins(graphe, chemin, arrivee) où graphe représente le graphe
donné, arrivee le sommet à atteindre et chemin le chemin en cours de construction (chemin est
une liste contenant lors du premier appel, un seul sommet : le sommet de départ) ; le rôle de cette
fonction est d’ajouter un arc valide au chemin et de se rappeler elle-même, avec ce chemin rallongé,
UPMC - Licence Biologie Mathématiques 2