TD 1 RecComp Correction
TD 1 RecComp Correction
TD 1 RecComp Correction
Solution 1:
#include<stdio.h>
#define N 4
int min(int tab[N])
{
int i;
// 1 premire affectation de index
int index = 0;
// n comparaisons + n-1 affectations
for(i=1; i<N; i++)
{
// n-1 comparaisons
// dans le pire des cas, n-1 affectations
if(tab[i] < tab[index])
index = i;
}
return index;
}
main()
{
int tt[] ={7,4,2,4,2,9};
printf("index du min est = %d\n", min(tt));
}
• Ordre : O(n) ;
Exercice 2: On appelle MiniMax d’une matrice d’entiers la valeur minimale des maxi-
mas de chaque ligne. Écrire un algorithme qui retourne la valeur MiniMax d’une ma-
trice d’entiers n × m. On suppose N ≥ 1 et M ≥ 1. La fonction pourra être
int MiniMax(int tab[N][M]); . Évaluer sa complexité.
Solution 2:
#define m 3
#define n 3
int MiniMax(int tab[n][m])
{
• Compexité: T(m,n)=4*m*n+3*n-2;
Exercice 3:
1. int puissance(a,i)
3. méthode rapide
6. complexité:
T(s(a,n)) = T(p(a,n))+T(somme(a,n-1))
= T(p(a,n))+T(p(a,n-1))+T(somme(a,n-2))
= T(p(a,n))+T(p(a,n-1))+T(p(a,n-2))+T(p(a,n-3))+...+T(p(a,1))+1
= n + (n-1) + ....+1 = n(n+1)/2
est en O(n2 )
Exercice 4: Dire ce que définissent les fonctions suivantes, puis calculer leur complexité,
pour rec1 en nombre de multiplications par 2 et pour rec2 en nombre d’additions ;
int rec1(int n) int rec2(int n)
{ {
if(n == 0) if(n == 0)
return 1; return 1;
else else
return 2*rec1(n-1); return (rec2(n-1) + rec2(n-1));
} }
• Les deux fonctions calculent 2n
• Complexité de rec1(n):
T1(0) = 0; T1(1)=1+T1(0) = 1;
T1(n)=1+T1(n-1)=1+1+T1(n-2)=n = O(n)
• Complexité de rec2(n):
T2(0) = 0; T2(1)=1+2*T2(0)=1;
T2(2) = 1+2*T2(1) = 1 +2
T2(3)= 1+ 2 T2(2) = 1 + 2 + 22
T2(n) = 1+ 2 + 22 +.....+2n−1
T2(n)= 2n = O(2n )