Académique Documents
Professionnel Documents
Culture Documents
𝑓𝑖𝑏 𝑛 − 1 + 𝑓𝑖𝑏 𝑛 − 2 𝑠𝑖 𝑛 ≥ 2
𝑓𝑖𝑏 𝑛 =
1 𝑠𝑖 𝑛 = 0 𝑜𝑢 𝑛 = 1
𝒏 … 10 11 12 … 20 21 22 … 30 31 32 … 62 63 64 … … …
𝑻
Dans cette partie, on rédige un rapport décrivant le travail réalisé dans les
2 parties précédentes.
10- Rédiger un rapport décrivant le travail réalisé dans les 2 parties précédentes.
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 2 sur 19
Rem : Il est intéressant de développer une version itérative pour cet
algorithme.
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 3 sur 19
Le Corrigé du TP n°5
Solution :
L’algorithme récursif du problème de calcul des éléments de la suite de
Fibonacci, noté "Fibonacci_réc", s’écrit simplement comme s’énonce sa
définition. Il faut noter que l’on a 2 appels récursifs avec 2 paramètres
successifs : 𝑛 − 1 𝑒𝑡 𝑛 − 2 ; ce qui n’est pas le cas de l’algorithme récursif
du problème des tours de Hanoi (voir TP n° 4) où l’on a aussi 2 appels récursifs
mais avec le même paramètre : n − 1 . Il est présenté sur la figure 1 ci-dessous
(les instructions sont numérotées en rouge de 1 à 9).
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 4 sur 19
Algorithme Fibonacci_réc ; //Algorithme du problème de calcul des éléments
//de la suite de Fibonacci
Var n, res : entier ;
Début
//Partie 1: Lecture des données
1 ecrire ("\nDonner le nombre n = ");
2 lire (n);
//Partie 2: Traitement
3 res = fib(n) ; //appel de la fonction fib(n)
Solution :
Rappels : La définition de la complexité temporelle d’un algorithme itératif est
la même que celle d’un algorithme itératif. On reprend à titre de rappel la
définition présentée au chapitre 2.
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 5 sur 19
sous la forme d’une fonction, en notations exacte et/ou asymptotique, dont les
variables sont les données en entrée de l’algorithme.
Rem 2 : Il faut préciser que la notation exacte est rarement utilisée. C’est la
notation asymptotique de Landau qui est couramment utilisée.
On a : 𝐿 = 9 instructions.
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 7 sur 19
N° Instruction Ii Fréquence d'exécution fi
//Algorithme principal
1 ecrire("Donner le nombre n ="') ; 𝑓1 = 1
2 lire(n) ; 𝑓2 = 1
1 𝑠𝑖 𝑛 = 0
6 alors retourner 1 ; 𝑓6 = 0 𝑠𝑖 𝑛 = 1
0 𝑠𝑖 𝑛 ≥ 2
0 𝑠𝑖 𝑛 = 0
7 sinon si (n = 1) 𝑓7 = 1 𝑠𝑖 𝑛 = 1
1 𝑠𝑖 𝑛 ≥ 2
0 𝑠𝑖 𝑛 = 0
8 alors retourner 1 ; 𝑓8 = 1 𝑠𝑖 𝑛 = 1
0 𝑠𝑖 𝑛 ≥ 2
Commentaire explicatif :
1- L’instruction d’appel de fonction n°3 : res = fib(n)
Cette instruction est une affectation d’un appel de la fonction fib(n) à une
variable. C’est une instruction complexe composée de 3 instructions :
1- Une instruction d’appel de la fonction : fib(n).
2- L’exécution de la fonction récursive fib(n).
3- Une instruction d’affectation : res = fib(n).
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 8 sur 19
Les 2 instructions d’appel de la fonction récursive et d’affectation sont
comptées chacune 1 fois comme des opérations exécutables par le processeur de
manière indivisible.
Il en résulte :
𝑓3 (𝑛) = 𝐻(𝑛) + 2
Il en résulte :
0 𝑠𝑖 𝑛 = 0
𝑓9 = 0 𝑠𝑖 𝑛 = 1
𝐻 𝑛−1 +𝐻 𝑛−2 +6 𝑠𝑖 𝑛 ≥ 2
Cette étape est traitée dans le tableau des fréquences d'exécutions des
instructions ci-dessus.
𝑛𝑏𝑥 𝑛 = 𝑓𝑖 = 𝑓1 + 𝑓2 + 𝑓3 + 𝑓4
𝑖=1
𝑛𝑏𝑥 𝑛 = 1 + 1 + 𝐻 𝑛 + 2 + 1
𝑛𝑏𝑥 𝑛 = 𝐻 𝑛 + 5 (1)
Cette étape est traitée dans le tableau des fréquences d'exécutions des
instructions ci-dessus.
𝐻 𝑛 = 𝑓𝑖 = 𝑓5 + 𝑓6 + 𝑓7 + 𝑓8 + 𝑓9
𝑖=5
𝐻 𝑛 =
1 + 1 + 0 + 0 + (0) 𝑠𝑖 𝑛 = 0
1 + 0 + 1 + 1 + (0) 𝑠𝑖 𝑛 = 1
1 + 0 + 1 + 0 + (𝐻 𝑛 − 1 + 𝐻 𝑛 − 2 + 6) 𝑠𝑖 𝑛 ≥ 2
2 𝑠𝑖 𝑛 = 0
𝐻 𝑛 = 3 𝑠𝑖 𝑛 = 1 (2)
𝐻 𝑛−1 +𝐻 𝑛−2 +8 𝑠𝑖 𝑛 ≥ 2
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 10 sur 19
Rem 3 : On déduit à partir de l’équation (2) que les conditions initiales
𝑯(𝟎) = 𝟐 et 𝑯(𝟏) = 𝟑 correspondent aux conditions terminales de la fonction
récursive fib(n).
Rem 4 : On déduit aussi à partir de l’équation (2) que le meilleur cas correspond
à 𝑛 = 0 et le pire cas correspond au maximum de la valeur de 𝑛, 𝑛 >= 2. La
valeur 𝑛 = 1 est un cas intermédiaire entre ces 2 cas extrêmes (de même que
toutes les valeurs 𝑖, 1 ≤ 𝑖 ≤ (𝑛 − 1)) .
𝑛𝑏𝑥 𝑛 = 𝐻 𝑛 + 5
6+5 5 1+ 5 𝑛 19− 5 1+ 5 𝑛
𝑛𝑏𝑥 𝑛 = ( ( )( ) +( )( ) −8)+5 ∀𝑛≥0
5 2 5+ 5 2
6+5 5 1+ 5 𝑛 19− 5 1+ 5 𝑛
𝑛𝑏𝑥 𝑛 = ( )( ) +( )( ) −3 ∀𝑛≥0 (4)
5 2 5+ 5 2
a- En notation exacte :
On a :
𝑐𝑡 𝑛 = 𝑛𝑏𝑥 𝑛
6+5 5 1+ 5 𝑛 19− 5 1− 5 𝑛
𝑐𝑡 𝑛 = ( )( ) +( )( ) −3 ∀𝑛≥0
5 2 5+ 5 2
b- En notation asymptotique O :
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 11 sur 19
On a :
1+ 5 𝑛
𝑐𝑡 𝑛 = 𝑂(( ) )
2
//Voir le chapitre 1 et la série TD n°1 pour l’écriture des fonctions en notation
//asymptotique.
𝟏− 𝟓 𝟏− 𝟓 𝒏
//(Ind : On a : 𝟓 ≈ 𝟐. 𝟐𝟑𝟔 −𝟏<( )<0 −𝟏 < ( ) < 1)
𝟐 𝟐
Solution :
Rappel : La définition de la complexité spatiale d’un algorithme itératif est la
même que celle d’un algorithme itératif. On reprend à titre de rappel la
définition déjà présentée au chapitre 2.
Rem 2 : Il faut préciser que la notation exacte est rarement utilisée. C’est la
notation asymptotique de Landau qui est couramment utilisée.
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 13 sur 19
Algorithme Fibonacci_réc ; //Algorithme du problème de calcul des éléments
//de la suite de Fibonacci
Var n, res : entier ;
Début
//Partie 1: Lecture des données
1 ecrire ("\nDonner le nombre n = ");
2 lire (n);
//Partie 2: Traitement
3 res = fib(n) ; //appel de la fonction fib(n)
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 14 sur 19
3- Calculer le nombre des données locales de la fonction récursive
(paramètres de la fonction et ses variables locales) et l’espace mémoire
nécessaire pour leur enregistrement dans une pile en mémoire centrale. Il
faut distinguer entre les données scalaires (ou élémentaires) et les données
composées.
4- Calculer la complexité spatiale en notations exacte et/ou asymptotique.
On a :
𝑁𝐷1 = 2 𝑑𝑜𝑛𝑛é𝑒𝑠 de type scalaire (entier) : 𝑛 𝑒𝑡 𝑟𝑒𝑠 ;
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 15 sur 19
𝐺 𝑛 =1+𝐺 𝑛−1 ∀𝑛 ≥ 2
𝐺 0 =1 (6)
𝐺 1 =1
où,
- 𝐺(𝑛 − 1) correspond à l’espace mémoire des données locales (paramètres
et variables locales) de la fonction fib(n-1) (incluse dans la définition de
fib(n)).
- La constante 1 correspond à correspond à l’espace mémoire nécessaire
pour enregistrer le paramètre de la fonction récursive fib(n) (ici, on a 1
seul paramètres : 𝑛 et aucune variable locale).
- 𝐺 0 = 1 est la condition initiale de l’équation de récurrence et
correspond à l’espace mémoire nécessaire pour réaliser les conditions
terminales de la fonction récursive fib(n) (ici, la condition terminale est
fib(0)) qui nécessite un espace mémoire pour enregistrer le paramètre
𝑛 = 0).
- 𝐺 1 = 1 est la condition initiale de l’équation de récurrence et
correspond à l’espace mémoire nécessaire pour réaliser les conditions
terminales de la fonction récursive fib(n) (ici, la condition terminale est
fib(1)) qui nécessite un espace mémoire pour enregistrer le paramètre
𝑛 = 1).
𝑛 𝑠𝑖 𝑛 ≥ 1
𝐺 𝑛 = (7)
1 𝑠𝑖 𝑛 = 0
1- fib(n-1) //(instruction n° 9)
2- fib(n-2) //(instruction n° 9)
Cependant, on n’a pas besoin de sauvegarder en même temps, dans une pile,
les données locales (paramètres et variables locales) de ces 2 fonctions car la
2ème fonction fib(n-2) ne commence son exécution qu’après la terminaison de
l’exécution de la 1ère fonction fib(n-1), soit après que les données de cette
dernière soient entièrement dépilées.
Soit 𝑀(𝑛) l’espace mémoire nécessaire pour enregistrer les instructions et les
données de l’algorithme.
On a :
𝑀(𝑛) = 𝑀𝐼 + 𝑀𝐷1 + 𝐺(𝑛)
9 + (2) + 𝑛 𝑠𝑖 𝑛 ≥ 1
𝑀 𝑛 = //en mots mémoires
9 + (2) + 1 𝑠𝑖 𝑛 = 0
𝑛 + 11 𝑠𝑖 𝑛 ≥ 1
𝑀 𝑛 = //en mots mémoires
12 𝑠𝑖 𝑛 = 0
a - En notation exacte :
On a :
𝑐𝑠 𝑛 = 𝑀 𝑛
𝑛 + 11 𝑠𝑖 𝑛 ≥ 1
𝑐𝑠 𝑛 =
12 𝑠𝑖 𝑛 = 0
b- En notation asymptotique O :
On a :
𝑂(𝑛) 𝑠𝑖 𝑛 ≥ 1
𝑐𝑠 𝑛 =
𝑂(1) 𝑠𝑖 𝑛 = 0
//Voir le chapitre 1 et la série TD n°1 pour l’écriture des fonctions
//en notation asymptotique.
𝑛 + 11 𝑠𝑖 𝑛 ≥ 1
𝑒𝑛 𝑛𝑜𝑡𝑎𝑡𝑖𝑜𝑛 𝑒𝑥𝑎𝑐𝑡𝑒
12 𝑠𝑖 𝑛 = 0
𝑐𝑠 𝑛 = 𝑂(𝑛) 𝑠𝑖 𝑛 ≥ 1 (8)
𝑒𝑛 𝑛𝑜𝑡𝑎𝑡𝑖𝑜𝑛 𝑎𝑠𝑦𝑚𝑝𝑡𝑜𝑡𝑖𝑞𝑢
𝑂(1) 𝑠𝑖 𝑛 = 0
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 17 sur 19
4- Ecrire avec le langage C le programme correspondant.
Solution :
A traiter par les étudiants
𝒏 … 10 11 12 … 20 21 22 … 30 31 32 … 62 63 64 … … …
𝑻
Solution :
A traiter par les étudiants
Solution :
A traiter par les étudiants
Solution :
A traiter par les étudiants
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 18 sur 19
8.b- Comparer entre la complexités théorique et la complexité
expérimentale (çàd., les mesurs expérimentales). Les prédictions théoriques
sont-elles compatibles avec les mesures expérimentales ?
Solution :
A traiter par les étudiants
Solution :
A traiter par les étudiants
Dans cette partie, on rédige un rapport décrivant le travail réalisé dans les
2 parties précédentes.
10- Rédiger un rapport décrivant le travail réalisé dans les 2 parties précédentes.
Solution :
A traiter par les étudiants
ère
1 année Master Informatique
Module : Conception et Complexité des Algorithmes, Série de Travaux Pratiques n° 5 Page 19 sur 19