TD 3 : Récursivité




Les méthodes de tous les exercices doivent être écrites dans les classes fournies en annexe (télécharger ces classes) .



EXERCICE 1

On considère les entiers écrits en binaires et on cherche à générer tous les entiers binaires d'une longueur donnée. Par exemple, tous les entiers binaires de trois chiffres sont :
000   001   010   100   011   110   101   111

Ecrivez la méthode imprimer(int k) de la classe Binaire telle que imprimer(k) imprime sur le flux de sortie tous les entiers binaires de longueur k. Calculez la complexité de cette méthode.

Ecrivez une méthode annexe (et privée) récursive qui imprime tous les entiers binaires de longueur k précédés d'un préfixe (une chaîne de caractères) donné.


EXERCICE 2

On considère les mots écrits à l'aide des deux lettres x et y et on cherche à générer tous les mots contenants un nombre particulier de x et un nombre particulier de y. Par exemple, tous les mots contenants exactement trois x et deux y sont :
yyxxx   yxyxx   yxxyx   yxxxy   xyyxx   xyxyx   xyxxy   xxyyx   xxyxy   xxxyy



Ecrivez la méthode imprimer(int p, int q) de la classe Mots telle que imprimer(p,q) imprime sur le flux de sortie tous les mots contenants exactement p fois la lettre x et q fois la lettre y. Calculez la complexité de cette méthode.

Même chose que précédemment !


EXERCICE 3

Soit T un tableau contenant n entiers positifs ou nuls e0, e1, ... ,en-1. Les valeurs de T sont positives ou nulles et apparaissent dans un ordre quelconque.

Ecrivez la méthode possible(int i) de la classe Somme telle que possible(i) teste s'il existe un sous ensemble S de T tel que la somme des éléments de S est egale à i. Calculez la complexité de cette méthode.

Ecrivez et urilisez une méthode annexe (privée) récursive qui teste s'il existe un sous ensemble S de Tk tel que la somme des éléments de S est egale à i, où Tk est l'ensemble de k premières valeurs du tableau.


EXERCICE 4

Un voleur dévalise un magasin et dispose d'un sac pour emporter des objets. Il y a dans le magasin n objets, et chaque objet xi (0 £ i £ n-1) possède un poids pi et une valeur vi. De plus, le voleur ne peut pas emporter plus de P kilos dans son sac.

Ecrivez la méthode valeur(int P) de la classe Voleur qui retourne la valeur maximale du butin que le voleur peut emporter sans dépsaaser le poids maximal P. Calculez la complexité de cette méthode.

Ecrivez et utilisez une méthode annexe (privée) récursive qui détermine la valeur maximale du butin que le voleur peut emporter sans dépasser un certain poids et en choisissant parmi les k premiers objets.


EXERCICE 5

On suppose qu'on a un réseau informatique constitué de n sites numérotés de 0 à n-1. Une matrice connexion permet de savoir s'il existe une ligne directe entre les sites i et j. Ainsi connexion[i][j] = true si et seulement s'il existe une ligne directe entre les sites i et j. S'il n'existe pas de ligne directe entre les sites i et j, on peut néanmoins se connecter de i à j en passant par d'autres sites.

Ecrivez la méthode connecte(int i, int j) de la classe Connexion qui détermine pour tout couple (i,j) si l'on peut se connecter de i à j sur ce réseau en passant éventuellement par d'autres sites. Calculez la complexité de cette méthode.

Ecrivez et utilisez une méthode annexe (privée) récursive qui détermine si on peut se connecter de i à j en passant éventuellement par un, zéro, ou plusieurs des k premiers sites.

On suppose maintenant que les connexions ont un coût. Comment peut-on stocker cette information ?

Complétez la classe Distance et écrivez la méthode cout(int i, int j) de cette classe qui calcule pour tout couple de sites (i,j) le coût minimum pour se connecter de i à j, en passant éventuellement par d'autres sites. Calculez la complexité de cette méthode.

Même chose que précédemment !


EXERCICE 6

On s'intéresse aux permutations d'ordre n pour un n > 1 donné. Par exemple, toutes les permutations d'ordre 3 sont :
(1, 2, 3) (1, 3, 2) (2, 1, 3) (2, 3, 1) (3, 1, 2) (3, 2, 1)

Ecrivez la méthode imprimer(int k) de la classe Permutation telle que imprimer(k) imprime sur le flux de sortie toutes les permutations d'ordre k. Calculez la complexité de cette méthode.

Ecrivez et utilisez une méthode annexe (et privée) récursive qui permute et imprime un tableau contenant les entiers 1,2,...,n.


This document was translated from LATEX by HEVEA.