Documente Academic
Documente Profesional
Documente Cultură
Septembre, 2012
Exercice 1
Induction :
Induction :
Hypothèse de récurrence : soit n ≥ 2 et supposons
que l’algorithme F se termine et retourne la valeur
3k − 2k pour tout entier k tel que 0 ≤ k < n.
Induction :
Hypothèse de récurrence : soit n ≥ 2 et supposons
que l’algorithme F se termine et retourne la valeur
3k − 2k pour tout entier k tel que 0 ≤ k < n.
Démontrons maintenant que l’algorithme F (n) se
termine et retourne la valeur 3n − 2n .
Induction :
Hypothèse de récurrence : soit n ≥ 2 et supposons
que l’algorithme F se termine et retourne la valeur
3k − 2k pour tout entier k tel que 0 ≤ k < n.
Démontrons maintenant que l’algorithme F (n) se
termine et retourne la valeur 3n − 2n .
Puisque n ≥ 2, alors l’algorithme F (n) va engendrer
deux appels récursifs : F (n − 1) et F (n − 2).
Induction :
Hypothèse de récurrence : soit n ≥ 2 et supposons
que l’algorithme F se termine et retourne la valeur
3k − 2k pour tout entier k tel que 0 ≤ k < n.
Démontrons maintenant que l’algorithme F (n) se
termine et retourne la valeur 3n − 2n .
Puisque n ≥ 2, alors l’algorithme F (n) va engendrer
deux appels récursifs : F (n − 1) et F (n − 2).
D’après l’hypothèse de récurrence, ces deux appels se
terminent et retournent respectivement 3n−1 − 2n−1 et
3n−2 − 2n−2 .
Induction :
Hypothèse de récurrence : soit n ≥ 2 et supposons
que l’algorithme F se termine et retourne la valeur
3k − 2k pour tout entier k tel que 0 ≤ k < n.
Démontrons maintenant que l’algorithme F (n) se
termine et retourne la valeur 3n − 2n .
Puisque n ≥ 2, alors l’algorithme F (n) va engendrer
deux appels récursifs : F (n − 1) et F (n − 2).
D’après l’hypothèse de récurrence, ces deux appels se
terminent et retournent respectivement 3n−1 − 2n−1 et
3n−2 − 2n−2 .
Donc, l’algorithme F (n) se termine et retourne la valeur
5 × (3n−1 − 2n−1 ) − 6 × (3n−2 − 2n−2 ).
On en déduit que :
On en déduit que :
ij = i0 + 1 × (j − 0) = j + 2, ∀j ≥ 0.
On en déduit que :
ij = i0 + 1 × (j − 0) = j + 2, ∀j ≥ 0.
Alors : ij−1 = (j − 1) + 2 = j + 1, ∀j ≥ 1.
On en déduit que :
ij = i0 + 1 × (j − 0) = j + 2, ∀j ≥ 0.
Alors : ij−1 = (j − 1) + 2 = j + 1, ∀j ≥ 1.
t[j + 1] = 5 × t[j] − 6 × t[j − 1], ∀j ≥ 1.
On en déduit que :
ij = i0 + 1 × (j − 0) = j + 2, ∀j ≥ 0.
Alors : ij−1 = (j − 1) + 2 = j + 1, ∀j ≥ 1.
t[j + 1] = 5 × t[j] − 6 × t[j − 1], ∀j ≥ 1.
Invariant de boucle :
On en déduit que :
ij = i0 + 1 × (j − 0) = j + 2, ∀j ≥ 0.
Alors : ij−1 = (j − 1) + 2 = j + 1, ∀j ≥ 1.
t[j + 1] = 5 × t[j] − 6 × t[j − 1], ∀j ≥ 1.
Invariant de boucle :
t[j] = 3j − 2j , ∀j ≥ 0
On en déduit que :
ij = i0 + 1 × (j − 0) = j + 2, ∀j ≥ 0.
Alors : ij−1 = (j − 1) + 2 = j + 1, ∀j ≥ 1.
t[j + 1] = 5 × t[j] − 6 × t[j − 1], ∀j ≥ 1.
Invariant de boucle :
t[j] = 3j − 2j , ∀j ≥ 0
Preuve par récurrence.
On en déduit que :
ij = i0 + 1 × (j − 0) = j + 2, ∀j ≥ 0.
Alors : ij−1 = (j − 1) + 2 = j + 1, ∀j ≥ 1.
t[j + 1] = 5 × t[j] − 6 × t[j − 1], ∀j ≥ 1.
Invariant de boucle :
t[j] = 3j − 2j , ∀j ≥ 0
Preuve par récurrence.
Base :
On en déduit que :
ij = i0 + 1 × (j − 0) = j + 2, ∀j ≥ 0.
Alors : ij−1 = (j − 1) + 2 = j + 1, ∀j ≥ 1.
t[j + 1] = 5 × t[j] − 6 × t[j − 1], ∀j ≥ 1.
Invariant de boucle :
t[j] = 3j − 2j , ∀j ≥ 0
Preuve par récurrence.
Base :
On a : t[0] = 0 = 30 − 20 et t[1] = 1 = 31 − 21 .
On en déduit que :
ij = i0 + 1 × (j − 0) = j + 2, ∀j ≥ 0.
Alors : ij−1 = (j − 1) + 2 = j + 1, ∀j ≥ 1.
t[j + 1] = 5 × t[j] − 6 × t[j − 1], ∀j ≥ 1.
Invariant de boucle :
t[j] = 3j − 2j , ∀j ≥ 0
Preuve par récurrence.
Base :
On a : t[0] = 0 = 30 − 20 et t[1] = 1 = 31 − 21 .
Donc, la propriété est vraie pour j = 0 et j = 1.
Prof. Abdelmajid Dargham Chapitre 1 : Introduction aux algorithmes
Exercice 2
Induction :
Induction :
Soit j ≥ 2 et supposons que t[k] = 3k − 2k pour tout
entier k tel que 0 ≤ k < j.
Induction :
Soit j ≥ 2 et supposons que t[k] = 3k − 2k pour tout
entier k tel que 0 ≤ k < j.
Démontrons que t[j] = 3j − 2j .
Induction :
Soit j ≥ 2 et supposons que t[k] = 3k − 2k pour tout
entier k tel que 0 ≤ k < j.
Démontrons que t[j] = 3j − 2j .
On a : t[j] = t[(j − 1) + 1] avec j − 1 ≥ 1.
Induction :
Soit j ≥ 2 et supposons que t[k] = 3k − 2k pour tout
entier k tel que 0 ≤ k < j.
Démontrons que t[j] = 3j − 2j .
On a : t[j] = t[(j − 1) + 1] avec j − 1 ≥ 1.
D’après les faits,
t[j] = t[(j − 1) + 1] = 5 × t[j − 1] − 6 × t[j − 2].
Induction :
Soit j ≥ 2 et supposons que t[k] = 3k − 2k pour tout
entier k tel que 0 ≤ k < j.
Démontrons que t[j] = 3j − 2j .
On a : t[j] = t[(j − 1) + 1] avec j − 1 ≥ 1.
D’après les faits,
t[j] = t[(j − 1) + 1] = 5 × t[j − 1] − 6 × t[j − 2].
D’après l’hypothèse de récurrence, on a :
t[j] = 5 × (3j−1 − 2j−1 ) − 6 × (3j−2 − 2j−2 ) = 3j − 2j .
Les faits:
Les faits:
a0 = 0;
Les faits:
a0 = 0;
b0 = 1;
Les faits:
a0 = 0;
b0 = 1;
i0 = 2;
Les faits:
a0 = 0;
b0 = 1;
i0 = 2;
c0 n’est pas défini.
Les faits:
a0 = 0;
b0 = 1;
i0 = 2;
c0 n’est pas défini.
cj = 5 × bj−1 − 6 × aj−1 , ∀j ≥ 1
Les faits:
a0 = 0;
b0 = 1;
i0 = 2;
c0 n’est pas défini.
cj = 5 × bj−1 − 6 × aj−1 , ∀j ≥ 1
aj = bj−1 , ∀j ≥ 1
Les faits:
a0 = 0;
b0 = 1;
i0 = 2;
c0 n’est pas défini.
cj = 5 × bj−1 − 6 × aj−1 , ∀j ≥ 1
aj = bj−1 , ∀j ≥ 1
bj = cj = 5 × bj−1 − 6 × aj−1 , ∀j ≥ 1
Les faits:
a0 = 0;
b0 = 1;
i0 = 2;
c0 n’est pas défini.
cj = 5 × bj−1 − 6 × aj−1 , ∀j ≥ 1
aj = bj−1 , ∀j ≥ 1
bj = cj = 5 × bj−1 − 6 × aj−1 , ∀j ≥ 1
ij = ij−1 + 1, ∀j ≥ 1
On en déduit que :
On en déduit que :
ij = j + 2, ∀j ≥ 0
On en déduit que :
ij = j + 2, ∀j ≥ 0
bj = 5 × bj−1 − 6 × aj−1 , ∀j ≥ 1.
On en déduit que :
ij = j + 2, ∀j ≥ 0
bj = 5 × bj−1 − 6 × aj−1 , ∀j ≥ 1.
Invariant de boucle :
On en déduit que :
ij = j + 2, ∀j ≥ 0
bj = 5 × bj−1 − 6 × aj−1 , ∀j ≥ 1.
Invariant de boucle :
bj = 3j+1 − 2j+1 , ∀j ≥ 0.
On en déduit que :
ij = j + 2, ∀j ≥ 0
bj = 5 × bj−1 − 6 × aj−1 , ∀j ≥ 1.
Invariant de boucle :
bj = 3j+1 − 2j+1 , ∀j ≥ 0.
Base
Base
Pour j = 0, on a : b0 = 1 = 3 − 2 = 30+1 − 20+1 .
Base
Pour j = 0, on a : b0 = 1 = 3 − 2 = 30+1 − 20+1 .
Pour j = 1, on a : b1 = c1 = 5 × b0 − 6 × a0
= 5 × 1 − 6 × 0 = 5 = 32 − 22 = 31+1 − 21+1 .
Base
Pour j = 0, on a : b0 = 1 = 3 − 2 = 30+1 − 20+1 .
Pour j = 1, on a : b1 = c1 = 5 × b0 − 6 × a0
= 5 × 1 − 6 × 0 = 5 = 32 − 22 = 31+1 − 21+1 .
Donc, la propriété est vraie pour j = 0 et j = 1.
Induction
Induction
Hypothèse de récurrence : soit j ≥ 2 et supposons que
bk = 3k+1 − 2k+1 , pour tout entier k tel que 0 ≤ k < j.
Induction
Hypothèse de récurrence : soit j ≥ 2 et supposons que
bk = 3k+1 − 2k+1 , pour tout entier k tel que 0 ≤ k < j.
Démontrons que bj = 3j+1 − 2j+1 .
Induction
Hypothèse de récurrence : soit j ≥ 2 et supposons que
bk = 3k+1 − 2k+1 , pour tout entier k tel que 0 ≤ k < j.
Démontrons que bj = 3j+1 − 2j+1 .
D’après les faits, on a :
bj = 5 × bj−1 − 6 × aj−1 = 5 × bj−1 − 6 × bj−2 .
Induction
Hypothèse de récurrence : soit j ≥ 2 et supposons que
bk = 3k+1 − 2k+1 , pour tout entier k tel que 0 ≤ k < j.
Démontrons que bj = 3j+1 − 2j+1 .
D’après les faits, on a :
bj = 5 × bj−1 − 6 × aj−1 = 5 × bj−1 − 6 × bj−2 .
D’après l’hypothèse de récurrence, on a :
bj = 5 × (3j − 2j ) − 6 × (3j−1 − 2j−1 ) = 3j+1 − 2j+1 .
Algorithme itératif :
Algorithme itératif :
Fonction Quotient(a, b : Entier) : Entier;
Algorithme itératif :
Fonction Quotient(a, b : Entier) : Entier;
Variables
Algorithme itératif :
Fonction Quotient(a, b : Entier) : Entier;
Variables
q : Entier;
Algorithme itératif :
Fonction Quotient(a, b : Entier) : Entier;
Variables
q : Entier;
Début
Algorithme itératif :
Fonction Quotient(a, b : Entier) : Entier;
Variables
q : Entier;
Début
q := 0;
Algorithme itératif :
Fonction Quotient(a, b : Entier) : Entier;
Variables
q : Entier;
Début
q := 0;
Tant Que (a ≥ b) Faire
Algorithme itératif :
Fonction Quotient(a, b : Entier) : Entier;
Variables
q : Entier;
Début
q := 0;
Tant Que (a ≥ b) Faire
a := a − b;
Algorithme itératif :
Fonction Quotient(a, b : Entier) : Entier;
Variables
q : Entier;
Début
q := 0;
Tant Que (a ≥ b) Faire
a := a − b;
q := q + 1;
Algorithme itératif :
Fonction Quotient(a, b : Entier) : Entier;
Variables
q : Entier;
Début
q := 0;
Tant Que (a ≥ b) Faire
a := a − b;
q := q + 1;
FinTQ
Algorithme itératif :
Fonction Quotient(a, b : Entier) : Entier;
Variables
q : Entier;
Début
q := 0;
Tant Que (a ≥ b) Faire
a := a − b;
q := q + 1;
FinTQ
Retourner (q);
Algorithme itératif :
Fonction Quotient(a, b : Entier) : Entier;
Variables
q : Entier;
Début
q := 0;
Tant Que (a ≥ b) Faire
a := a − b;
q := q + 1;
FinTQ
Retourner (q);
Fin
Terminaison :
Terminaison :
Si a < b, la boucle ”Tant Que” n’est pas exécutée.
L’algorithme se termine.
Terminaison :
Si a < b, la boucle ”Tant Que” n’est pas exécutée.
L’algorithme se termine.
Si a ≥ b, la boucle sera exécutée au moins une fois.
Comme la valeur de a se décrémente de b unités à la fin
de chaque itération, la condition a ≥ b deviendra fausse
à un certain moment. L’algorithme se terminera alors.
Correction :
Correction :
Si a < b, l’algorithme retourne la valeur 0 = a/b.
Correction :
Si a < b, l’algorithme retourne la valeur 0 = a/b.
Supposons que a ≥ b. On a les faits suivants :
Correction :
Si a < b, l’algorithme retourne la valeur 0 = a/b.
Supposons que a ≥ b. On a les faits suivants :
1 a0 = a.
Correction :
Si a < b, l’algorithme retourne la valeur 0 = a/b.
Supposons que a ≥ b. On a les faits suivants :
1 a0 = a.
2 q0 = 0.
Correction :
Si a < b, l’algorithme retourne la valeur 0 = a/b.
Supposons que a ≥ b. On a les faits suivants :
1 a0 = a.
2 q0 = 0.
3 aj+1 = aj − b; ∀j ≥ 0
Correction :
Si a < b, l’algorithme retourne la valeur 0 = a/b.
Supposons que a ≥ b. On a les faits suivants :
1 a0 = a.
2 q0 = 0.
3 aj+1 = aj − b; ∀j ≥ 0
4 qj+1 = qj + 1; ∀j ≥ 0
Correction :
Si a < b, l’algorithme retourne la valeur 0 = a/b.
Supposons que a ≥ b. On a les faits suivants :
1 a0 = a.
2 q0 = 0.
3 aj+1 = aj − b; ∀j ≥ 0
4 qj+1 = qj + 1; ∀j ≥ 0
On en déduit alors que :
Correction :
Si a < b, l’algorithme retourne la valeur 0 = a/b.
Supposons que a ≥ b. On a les faits suivants :
1 a0 = a.
2 q0 = 0.
3 aj+1 = aj − b; ∀j ≥ 0
4 qj+1 = qj + 1; ∀j ≥ 0
On en déduit alors que :
1 qj = j, ∀j ≥ 0.
Correction :
Si a < b, l’algorithme retourne la valeur 0 = a/b.
Supposons que a ≥ b. On a les faits suivants :
1 a0 = a.
2 q0 = 0.
3 aj+1 = aj − b; ∀j ≥ 0
4 qj+1 = qj + 1; ∀j ≥ 0
On en déduit alors que :
1 qj = j, ∀j ≥ 0.
2 aj = a − jb, ∀j ≥ 0.
Algorithme récursif :
Algorithme récursif :
Fonction Quotient(a, b : Entier) : Entier;
Algorithme récursif :
Fonction Quotient(a, b : Entier) : Entier;
Début
Algorithme récursif :
Fonction Quotient(a, b : Entier) : Entier;
Début
Si (a < b) Alors
Algorithme récursif :
Fonction Quotient(a, b : Entier) : Entier;
Début
Si (a < b) Alors
Retourner (0);
Algorithme récursif :
Fonction Quotient(a, b : Entier) : Entier;
Début
Si (a < b) Alors
Retourner (0);
Sinon
Algorithme récursif :
Fonction Quotient(a, b : Entier) : Entier;
Début
Si (a < b) Alors
Retourner (0);
Sinon
Retourner (Quotient(a − b, b) + 1);
Algorithme récursif :
Fonction Quotient(a, b : Entier) : Entier;
Début
Si (a < b) Alors
Retourner (0);
Sinon
Retourner (Quotient(a − b, b) + 1);
FinSi;
Algorithme récursif :
Fonction Quotient(a, b : Entier) : Entier;
Début
Si (a < b) Alors
Retourner (0);
Sinon
Retourner (Quotient(a − b, b) + 1);
FinSi;
Fin