Académique Documents
Professionnel Documents
Culture Documents
pour l’Ingénieur
Algorithmique et Programmation 3
Recueil d’exercices
Année 2021-2022
Pascal Berthomé
pascal.berthome@insa-cvl.fr
Résumé
Ce recueil d’exercices servira de base pour cette année dans le module Algorith-
mique et Programmation 3 pour la partie algorithmique. Certains exercices seront vus
directement en cours, d’autres en TD. Enfin, certains ne seront pas directement traités.
Les exercices qui seront traités dans la partie langage seront mis sur Celene (ce
recueil aussi).
1 Algorithmique et pseudo-langage
Résumé
Avec cette série d’exercices, vous apprendrez à écrire des algorithmes en pseudo-
code, définir des fonctions et les utiliser dans d’autres fonctions ou algorithmes. Le
pseudo-code choisi est typé explicitement, ce qui oblige à bien définir les variables
avec leur type.
Pour les fonctions, il est important de définir les paramètres et leur mode de pas-
sage (IN, IN-OUT).
Résumé
Cette suite d’exercices a pour ambition d’aborder les thématiques de la vérification
des algorithmes. En particulier, la correction vérifie que l’algorithme proposé résout
bien le problème posé ; la terminaison regarde si l’algorithme proposé se termine dans
tous les cas ; et la complexité indique le nombre d’unités de ressources utilisée par l’al-
gorithme. La complexité est classiquement évaluée en fonction de la taille de l’entrée
et peut mesurer le temps ou l’espace nécessaire.
Un petit détour sur les comparaisons de croissance des fonction sera proposé.
FinFonction
(a) Démontrer que ce code est correct, c’est à dire qu’il renvoie bien pgcd(m, n).
(b) Démontrer que cet algorithme termine. Pour ce faire, on pourra démontrer au
préalable que la propriété 0 < bi+1 < bi est vérifiée pour toute itération i de la
boucle while, où bi dénote la valeur de b au début de la iième itération ou à la fin
de la (i − 1)ième itération.
2. On dispose d’un programme qui peut résoudre un problème de taille maximale M en
une minute. On planifie l’achat d’un nouveau microprocesseur 100 plus rapide que le
4. Dans le TD précédent, on avait écrit une fonction echangerMinPartiel, que l’on avait
utilisée dans une fonction qui permettait de trier un tableau. Le pseudo-code ci-
dessous est une solution possible pour cet exercice :
FinFonction
Fonction triSelection(In-Out Variable t : Tableau d’Entier) :
Pour i allant de 1 à taille(t)-1 par pas de 1
echangerMinPartiel(t, i)
FinPour
FinFonction
FinFonction
U = O( A) et V = O( B) ⇒ U + V = O( A + B) et U · V = O( A · B).
U = O( A) et A = O( B) ⇒ U = O( B).
U = O( A + B) et A = O( B) ⇒ U = O( B).
(a) Calculer les valeurs de la variable m ainsi que leurs écritures en base 2 au cours
des itérations, pour les entrées (4, 1), puis pour les entrées (7, 1).
(b) Si l’écriture binaire de la première entrée contient p bits, exprimer le coût tempo-
rel en fonction de p, dans le meilleur et dans le pire des cas.
(c) Pour prouver rigoureusement le point précédent, prouver un invariant de boucle
dans le meilleur et dans le pire des cas encadrant le nombre de bits dans l’écriture
binaire de la variable m en fonction du numéro de l’itération.
(d) En déduire la complexité de l’algorithme de la multiplication égyptienne.
Résumé
Ce chapitre illustre le fonctionnement des structures de données élémentaires, en
l’occurrence les piles, les files et les listes chaînées. Deux points de vues sont souvent
utilisés : celui de l’utilisateur de ces structures et celui du concepteur. Il est nécessaire
de bien identifier le point de vue demandé par l’exercice.
Résumé
Ce chapitre s’intéresse à un mode de réflexion un peu différent de l’algorithmique.
La récursion nécessite une absraction suffisante pour pouvoir traiter des problèmes
comme dans le cas de la récurrence : si je sais traiter un problème de plus petite taille,
est-ce que sais compléter ma solution partielle pour obtenir la solution globale.
Le mécanisme de récursion possède en général plusieurs avantages : une simpli-
cité d’écriture, des calculs de terminaison et de complexité souvent plus simples (ré-
currences). La difficulté réside dans la construction de l’algorithme.
1. On rappelle le principe de la méthode égyptienne pour calculer le résultat de la mul-
tiplication de deux entiers naturels :
n si m = 1
m
m∗n= ∗ (2n) si m est pair
2
(m − 1) ∗ n + n sinon.