
Information, calcul et communication EPFL - GC+SIE - Semestre d’automne 2016-2017
Module 1, Série 3 : Exercices sur les algorithmes (II)
1 Création d’algorithmes
a) Supposons que votre ordinateur utilise une représentation des nombres entiers positifs sur 64 bits. Ecrivez
un algorithme en pseudo-code dont l’entrée est net dont la sortie est le logarithme en base 2 de n![Pour rappel,
n!se dit “factorielle de n” et vaut n! = n·(n−1) ·(n−2) · · · 3·2·1] Quel est l’ordre de complexité de votre
algorithme ? (utiliser la notation de Landau O(·))
[Note : Si vous choisissez la solution qui peut paraître la plus simple a priori, vous serez confronté au problème
suivant : n!grandit très vite avec net dépasse déjà la valeur limite de votre ordinateur (264 −1) lorsque n= 21.
Or on aimerait calculer log2(n!) pour de plus grandes valeurs de n. Comment allez-vous vous y prendre pour
obtenir une réponse qui ne donne pas un overflow ?]
b) Ecrivez une version récursive du précédent algorithme. L’ordre de complexité de votre algorithme change-t-il ?
c) Soit Aune chaîne de caractères formée uniquement de mots et d’espaces entre les mots, et nsa longueur
(exemple : A=“Le silence des agneaux” et donc n= 22). Ecrivez un algorithme dont l’entrée est Aet n, et dont la
sortie est le nombre de mots de la chaîne (4 dans l’exemple). Quel est l’ordre de complexité de votre algorithme ?
d) Soit Lune liste de nombres entiers positifs de taille n(exemple : L={3,43,17,22,16}et donc n= 5).
Ecrivez un algorithme dont l’entrée est Let n, et dont la sortie est le plus grand nombre de la liste (dans
l’exemple : 43). Quel est l’ordre de complexité de votre algorithme ?
e) Soit Lune liste de nombres entiers positifs de taille n(exemple : L={3,43,17,22,16}et donc n= 5).
Ecrivez un algorithme dont l’entrée est Let n, et dont la sortie est le produit des deux plus grands nombres de
la liste (dans l’exemple : 43 ×22 = 946). Quel est l’ordre de complexité de votre algorithme ?
2 Quel est le bon algorithme ? deuxième partie
Lequel des quatre algorithmes suivants permet de calculer la somme des npremiers nombres pairs ? (exemple :
si n= 4, alors sdoit valoir 2 + 4 + 6 + 8 = 20) Expliquez également pourquoi les autres ne fonctionnent pas.
a) algo1
entrée : n nombre entier positif
sortie : s
Si n= 0
Sortir : 0
Sortir : algo1(n−2) + n
b) algo2
entrée : n nombre entier positif
sortie : s
Si n= 0
Sortir : 0
Sortir : 2×(algo2(n−1) + n)
c) algo3
entrée : n nombre entier positif
sortie : s
Si n= 0
Sortir : 0
Sortir : algo3(n−1) + 2n
d) algo4
entrée : n nombre entier positif
sortie : s
Si n= 0
Sortir : 0
Sortir : algo4(2n−2) + 2n
1