Licence Informatique 1
eannée
Algorithmique et Programmation Travaux Dirigés n°3 - Complexité
1- La complexité est une chose complexe
fonction avec retour booléen recherche1(chaine[] tab, chaine x) entier i;
booléen résultat;
début
résultat faux;← i ← 0;
tantque (non résultat ET i < tab.longueur) faire si (tab[i] = x) alors
résultat vrai← ; sinon
i ← i + 1;
finsi fintantque
retourne résultat;
fin
fonction avec retour booléen recherche2(chaine[] tab, chaine x) entier i;
booléen résultat;
début
résultat faux;← i ← 0;
tantque (non résultat ET i < tab.longueur ET tab[i] ≤ x) faire si (tab[i] = x) alors
résultat vrai;← sinon
i i + 1;← finsi
fintantque
retourne résultat;
fin
On suppose que le tableau passé en paramètre est trié par ordre croissant.
1.1 Donner pour chacune des deux fonctions son paramètre de complexité.
1.2 Donner pour chacune des deux fonctions ses cas d'exécution au pire et au mieux.
1.3 Donner pour chacune des deux fonctions ses complexités au pire et au mieux, en détaillant les calculs.
1.4 On suppose que tous les cas d'exécutions sont équiprobables. Calculer la complexité moyenne de chacune des fonctions.
2- Ordres de grandeur
Classer par ordre de grandeur croissant les fonctions suivantes :
f1(n) = 2n2 f7(n) = n ln(n)
f2(n) = en+1 f8(n) = log3(n)
f3(n) = 10n+n10 f9(n) = ln(n2+1)
f4(n) = 2n f10(n) = n2+n
f5(n) = n+log2(n) f11(n) = 22n
f6(n) = n + 7 f12(n) = ln(n2) + n
3- Complexité et hacking
fonction sans retour mystere(caractere[] chaine) entier x,y;
début
x 0;←
tantque (x < chaine.longueur-1) faire
si (chaine[x] = '/' ET chaine[x+1] = '/') alors
pour (y allant de x+1 à chaine.longueur-2 pas de 1) faire chaine[y] chaine[y+1];←
finpour
chaine[chaine.longueur-1] ' ';← sinon
x x + 1;← finsi
fintantque fin
3.1 Expliquer ce que fait la fonction mystere et quel est le paramètre de complexité de la fonction.
3.2 Quel est le cas d'exécution au pire de la fonction mystere? Calculer la complexité au pire de cette fonction.
3.3 En supposant que cette fonction soit utilisée dans les serveurs Web pour traiter les adresses internet, comment pourrait-on provoquer un déni de service? Un déni de service consiste à saturer un serveur en le bombardant de très nombreuses requêtes ou en lui soumettant des requêtes très lourdes à traiter.
3.4 Réécrire la fonction mystère pour qu’elle soit de complexité linéaire.
4- Complexité du tri par insertion
fonction sans retour triInsertion(entier[] tab) entier i, j, val;
début
pour (i allant de 1 à tab.longueur-1 pas 1) faire val tab[i];←
j i;←
tantque ((j > 0) et (tab[j-1] > val)) faire tab[j] tab[j-1];←
j j-1;← fintantque tab[j] val;← finpour
fin
Calculer la complexité de cette fonction.
5- Complexité du tri fusion
Calculer la complexité du tri fusion dont l’algorithme a été donné en cours.