Introduction à l’Algorithmique et la Programmation
feuille de TD Structures de données avancées
Exercice - 1Consultation de listes
1- Ecrivez une fonction position(elt, liste, depart) qui renvoie l’indice ide la première occurrence
de elt dans liste telle que idepart, ou 1si une telle occurrence n’existe pas.
2- Ecrivez une fonction sousListe(petiteListe, grandeListe) qui renvoie la réponse à la question : «
les éléments de petiteListe apparaissent-ils tous, et dans le même ordre, dans grandeListe ? » (c’est
le cas, par exemple, pour [2,4,10] et [1,2,4,5,6,8,10,12]).
3- Dans les fonctions précédentes est-il indispensable que liste,petiteListe,grandeListe soient des
listes ? Pour quel autres types données ces fonctions fonctionnent-elles telles quelles ?
Exercice - 2Opérations globales sur les listes
Les trois opérations sur les listes décrites ci-après reviennent souvent dans les applications, c’est
pourquoi il est intéressant de les écrire une fois pour toutes, sous forme de fonctions :
1- Transformation d’une liste.
a- Ecrivez une fonction transformer(fonction, liste) qui renvoie la liste obtenue en appliquant
la fonction donnée à chaque élément de la liste donnée.
b- Evaluez transformer(f, l) lorsque fest la fonction f(x) = x2et lla liste [1, 2, 3, 4, 5] (vous
devez obtenir la liste [1, 4, 9, 16, 25]).
2- Filtrage d’une liste.
a- Ecrivez une fonction filtrer(fonction, liste) qui renvoie la liste formée des éléments de la
liste donnée pour lesquels la fonction est vraie.
b- Evaluez filtrer(p, l) lorsque pest la fonction p(x) = « x est impair » et lla liste [1, 2, 3, 4,
5] (vous devez obtenir la liste [1, 3, 5]).
3- Cumul d’une liste.
a- Ecrivez une fonction cumuler(fonction, liste) qui renvoie le cumul des éléments de la liste
donnée pour l’opération binaire exprimée par la fonction donnée. On pourra considérer que
c’est une erreur que d’appeler cette fonction avec une liste ayant moins de deux éléments.
b- Evaluez cumuler(g, l) lorsque gest la fonction g(x, y) = xyet lla liste [1, 2, 3, 4, 5] (vous
devez obtenir 120, car 12345 = 120).
4- Forme lambda. Les trois tests précédents vous ont obligés à définir trois fonctions (f,pet g)
qui sont très simples et ne servent qu’une fois.
1
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) 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
feuille de TD Structures de données avancées IAP 2014-2015
pour continuer le travail. Il faudra veiller à détecter le moment où la cible est atteinte et aussi à
empêcher le chemin de tourner en rond.
Exercice - 4Représentation d’une arborescence
Une arborescence, ou arbre, est un ensemble muni d’une organisation hiérarchique : l’élément
tout en haut est appelé la racine et les autres éléments, s’il y en a, sont répartis en sous-ensembles
organisés de la même manière.
Par exemple, un livre a une structure d’arbre : il comporte un titre et est formé de chapitres ;
à son tour, chaque chapitre comporte son propre titre, et est divisé en sections ; chaque section a
également un titre, et est faite de sous-sections, etc. D’autres exemples évidents : les éléments d’un
système de fichiers, une entreprise ou une armée, etc.
On peut donner la définition récursive suivante : un arbre est un couple formé de :
une information spécifique, qui dépend du problème considéré,
une liste, éventuellement vide, d’arbres.
Ainsi, un arbre peut être représenté en Python par une doublet formé de :
une donnée dont le type dépend du problème considéré, et
une liste de structures bâties selon le même principe.
Par exemple, le doublet suivant : (’a’,[(’b’,[]),(’c’,[(’f’,[]),(’g’,[])]),(’d’,[]),(’e’,[(’h’,[])])]) représente
l’arbre dessiné ci-dessous.
1- Ecrivez la fonction afficher(arbre, marge) qui affiche l’arbre sous une forme plus facile à lire
que l’expression précédente : chaque information est sur une ligne, avec une marge à gauche qui
reflète la position hiérarchique (la profondeur) de l’élément. Plus précisément, cette fonction affiche
l’information portée par la racine de l’arbre en laissant à gauche la marge indiquée, puis se rappelle
elle-même sur chaque sous-arbre avec une marge augmentée. Dans le cas de l’expression ci-dessus,
cela donne l’affichage ci-dessous.
2- Ecrivez la fonction formater(arbre) qui produit l’expression de l’arbre donné selon la syntaxe :
les informations ne sont pas encadrées de guillemets ou d’apostrophes,
la représentation d’une feuille (i.e. un arbre sans sous-arbres) se réduit à l’information
correspondante,
l’expression d’un arbre qui n’est pas une feuille est : ( racine,sous-arbre1,. . . ,sous-arbrek
)
Par exemple, appliquée à l’arbre ci-dessus, cette fonction renvoie la chaîne :
(a, b, (c, f, g), d, (e, h)).
UPMC - Licence Biologie Mathématiques 3
feuille de TD Structures de données avancées IAP 2014-2015
UPMC - Licence Biologie Mathématiques 4
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !