GM3 Nathalie Chaignaud
Algorithmes et Structures de Données Mardi 13 Novembre 2012
Durée 1H30 – Cours et TD NON autorisés 1. Pile - Tri rapide (quicksort) - 6 pts
t : 6 3 0 9 1 7 8 2 5 4
Simuler la pile sur l’appel tri-rapide(t,1,10) (cf résumé de cours) en donnant aussi les valeurs intermédiaires de t après l’appel de partionner.
2. Calcul d’une fraction continue - 6 pts
On suppose donnés n+1 nombres entiers strictement positifs a0, a1, ..., an dans un tableau a (a[i] = ai, i = 0...n). On souhaite calculer la valeur du nombre :
1
x = a0 + __________________________
1
a1 + __________________
1
a2 + ____________
1 ... + __
an
2.1 - Ecrivez une fonction itérative qui calcule la valeur de ce nombre.
2.2 - Ecrivez une fonction récursive qui calcule la valeur de ce nombre.
3. Recherche de facteurs - 8 pts
On dispose de n chaînes de caractères (toutes de même longueur lg) qui résultent d’un
« découpage » (avec chevauchement) d’une chaîne initiale (voir exemple, où lg = 9 et n = 4). On suppose que le chevauchement est de longueur fixe k (ici k = 3). On souhaite reconstituer la chaîne initiale à partir des n chaînes (version très simplifiée d’un des problèmes de séquencement de l’ADN).
Exemple :
C A T T G A C T A C T A C C T A T G A C G T G A C A T A G G C T A A C G
A G G C T A A C G T G A C A T T G A C T A C C T A T G
On fait l’hypothèse très simplificatrice qu’il n’y a qu’une solution au problème, c’est-à-dire qu’il n’y a qu’un moyen d’agencer les n sous-chaînes avec un recouvrement de longueur k.
3.1. Expliquer en français le principe pour résoudre ce problème en terme de préfixe et de suffixe (de longueur k) d’une chaine de caractères.
3.2. Quelle structure de donnée faut-il pour représenter les n chaines de caractères avec leur place dans la chaîne initiale ? La décrire en pseudo-langage.
3.3. On dispose des fonctions préfixe(c,k) et suffixe(c,k) qui permettent de manipuler les préfixes et les suffixes (de longueur k) d’une chaîne c. Ecrire en pseudo-langage une procédure qui, étant données n chaînes de longueur lg et le recouvrement k, donne l’ordre dans lequel il faut placer les n sous-chaînes pour reconstituer la chaîne initiale. Les sorties de cette procédure sont donc la structure de donnée remplie décrite en 3.2., ainsi que la chaîne reconstituée (solution du problème).
3.4. Quelle est la complexité (O(?)) de cet algorithme ? Expliquer.