[PDF] Complexité Corrigé



Previous PDF Next PDF







Exercice 1 : Complexité des algorithmes (8 points)

Exercice 1 : Complexité des algorithmes (8 points) Question 1 1: On considère le code suivant, comportant deux « tant que » imbriqués On cherche à mesurer la complexité de cette imbrication en fonction de n Pour cela, on utilise la variable compteur, qui est incrémentée à chaque passage dans le « tant que » interne def procedure(n) :



SUJET + CORRIGE

UE J1BS7202 : Algorithmique et Programmation Epreuve : Examen Date : Jeudi 19 d ecembre 2013 Heure : 9 heures Dur ee : 2 heures Documents : autoris es Epreuve de M Alain Griffault SUJET + CORRIGE Avertissement {La plupart des questions sont ind ependantes { A chaque question, vous pouvez au choix r epondre par un algorithme ou bien par un



Examen d’algorithmique - IRIF

Examen d’algorithmique Mercredi 13 janvier 2016 12h{15h / Aucun document autoris e Mode d’emploi : Le bar eme est donn e a titre indicatif La qualit e de la r edaction des algorithmes et des explications sera fortement prise en compte pour la note On peut toujours supposer une question r esolue et passer a la suite



CORRECTION DE L’EXAMEN D’ALGORITHMIQUE ET COMPLEXITE

CORRECTION DE L’EXAMEN D’ALGORITHMIQUE ET COMPLEXITE Master Informatique, première année, janvier 2015 TOUS VOS DOCUMENTS SUR PAPIER SONT AUTORISES COURRIEL ET TELEPHONE SONT INTERDITS REPONDEZ AUX QUESTIONS DANS L’ORDRE NUMEROTEZ VOS REPONSES 1 Plus court chemin et programmation linéaire Considérez le graphe ci-dessous : 0 a b 1 2 4



Complexité Corrigé

Le cas tab[pos] > x se traite de la même façon, mais en considérant le tableau tab[0:(pos - 1)] detaillebn=2c,cequiconduitàunnombred’opérationsde



TD : Complexité des algorithmes

3 complexité spatiale : 3 * m 4 complexité temporelle : m-1 La complexité temporelle est toujours favorable à la représentation avec un tableau à 1 dimension La complexité spatiale l’est également tant que 3 * m < n * n, c’est à dire m < (n*n)/3 Exercice 2 Revoir poly, transparents 33, 34, et 35



Algorithmique et Structures de Données Corrigé de lexamen écrit

Algorithmique et Structures de Données Corrigé de l'examen écrit G1: monasse (at) imagine enpc G2: nicolas audebert (at) onera G3: boulc-ha (at) imagine enpc 03/04/2019 Les exercices sont indépendants Il n'est pas interdit d'utiliser votre portable pour tester vos algorithmes, mais évidemment pas le wi 1 Calcul de déterminant



Complexité des algorithmes - diluniv-mrsfr

Complexité des algorithmes Evaluation du nombre d’opérations élémentaires en fonction de la taille des données, de la nature des données Notations : n : taille des données, T(n) : nombre d’opérations élémentaires Configurations caractéristiques meilleur cas, pire des cas, cas moyen Cours complexité – Stéphane Grandcolas



Exercices et problemes dalgorithmique

L’algorithmique a donné lieu à de nombreux ouvrages remarquables depuis plus de trente ans, sur lesquels se fondent les enseignements dispensés dans les universités et écoles d’ingénieurs, et dont nous donnons une liste non exhaustive à la fin de cet ouvrage L’expérience des auteurs, enseignants chevronnés dans différentes



SUJET + CORRIGE

conséquence, de complexité O(1) Reduire(T) qui retire la dernière case du tableau T , et qui met à jour la aleurv de T longueur en consé-quence, de complexité O(1) ousV supposerez également que chaque case d'un tableau contient : un champ data pour stocker les données un champ cle pour ordonner les données

[PDF] examen corrigé de biologie animale PDF Cours,Exercices ,Examens

[PDF] examen corrigé de chimie minérale PDF Cours,Exercices ,Examens

[PDF] examen corrige de mecanique quantique PDF Cours,Exercices ,Examens

[PDF] examen corrige de mecanique quantique pdf PDF Cours,Exercices ,Examens

[PDF] examen corrigé de pharmacologie PDF Cours,Exercices ,Examens

[PDF] examen corrige echantillonnage estimation PDF Cours,Exercices ,Examens

[PDF] examen corrigé ethernet PDF Cours,Exercices ,Examens

[PDF] examen corrigé introduction au droit PDF Cours,Exercices ,Examens

[PDF] examen corrigé modele entité association PDF Cours,Exercices ,Examens

[PDF] examen corrigé+microéconomie PDF Cours,Exercices ,Examens

[PDF] Examen d'anglais, raconter son passée, son présent et son future Bac Anglais

[PDF] EXAMEN D'HISTOIRE POUR DEMAIN, HITLER 3ème Histoire

[PDF] examen d'entrée en section européenne PDF Cours,Exercices ,Examens

[PDF] examen de biologie animale avec correction pdf PDF Cours,Exercices ,Examens

[PDF] examen de biologie animale s2 pdf PDF Cours,Exercices ,Examens

Complexité

Corrigé

Fabrice Rossi

12 mars 2012

1 Correction de l"exercice 1.1

On considère donc le programme suivant :1i = 0

2j = 0

3while(i < n) {

4if( i % 2 == 0) {

5j = j + 1

6} else {

7j = j / 2

8}

9i = i + 1

10} Le programme est constitué d"une phase d"initialisation (lignes 1 et 2), puis d"une boucle. On

détermine d"abord le nombre d"exécution de la boucle. On remarque que la boucle s"exécute à

chaque fois quei < n. Or,iest initialisé à 0 (ligne 1) et chaque exécution (tour) de la boucle

incrémenteide 1 (ligne 9). La boucle s"exécute donc pour les valeurs dei0, 1, etc. jusqu"àn-1,

soit doncnfois. On constate ensuite que le corps de la boucle (lignes 4 à 9), contient un nombre d"instruction qui ne dépend ni de la valeur deini de celle dej. En effet, les deux lignes 5 et 7 contiennent chacune deux instructions (un calcul et une affectation). Les autres lignes (4 et 9) sont toujours exécutées. De ce fait, le temps d"exécution du corps de la boucle est donc un(1). Comme la boucle s"exécutenfois, le temps d"exécution du programme est alors en(n).

2 Correction de l"exercice 1.2

Le programme étudié est le suivant :1x = 0

2for(int i = 1 ; i < tab.length-1 ; i++) {

3for(int j = 0 ; j < 3 ; j++) {

4x = x + tab[i - 1 + j] * (j+1)

5} 6} L"analyse commence comme toujours par la boucle la plus interne, ici celle de lignes 3 à 5. La

quantité d"opérations réalisé dans un tour de la boucle (ligne 4 essentiellement) ne dépend ni des

valeurs des variablesietj, ni de la taille du tableautab(ou de son contenu). On a en effet : 1 - une affectationx=; - trois additions et une soustractionj+1,i-1+jetx+; - un accès à une case du tableautab; - une multiplication*(j+1); - une incrémentationi++; - une comparaisonj < 3. Globalement, un tour de cette boucle réalise donc(1)opérations. De plus, la boucle s"exécute exactement trois fois pourjprenant les valeurs 0, 1 et 2. Donc le nombre d"opérations réalisées par la boucle complète est un(1).

On constate ensuite que l"exécution complète de la boucle des lignes 3 à 5 constitue l"essentiel

de l"exécution d"un tour de la boucle des lignes 2 à 5 (la boucle externe). Un tour de cette boucle

prend donc(1)opérations. Enfin, cette boucle externe s"exécute pour les valeurs deiallant de

1 àtab.length-2, bornes incluses. On a donctab.length-2exécutions du corps de la boucle,

soit un nombre total d"opérations en(tab.length-2)(1), c"est-à-dire(tab.length).

3 Correction de l"exercice 1.3

Cet exercice ressemble beaucoup à l"exercice 1.2, avec une différence fondamentale dans la

boucle interne. En effet, dans l"exercice 1.2, la boucle interne réalise un nombre constant d"opé-

rations alors que dans le présent exercice, le nombre d"opérations dépend des caractéristiques des

données. Le programme est en effet le suivant :1x = 0

2for(int i = 0 ; i <= tab.length - filter.length ; i++) {

3for(int j = 0 ; j < filter.length ; j++) {

4x = x + tab[i + j] * filter[j]

5} 6}

Comme dans l"exercice précédent, une exécution de la boucle interne (lignes 3 à 5) réalise(1)opé-

rations. Mais cette boucle est exécutéefilter.lengthfois (pourjallant de 0 àfilter.length-1).

Donc le nombre d"opérations de la boucle interne complète est en(filter.length). La boucle externe (lignes 2 à 5) s"exécute elletab.length - filter.length+1fois. Si on note n=tab.lengthetp=filter.length, on a donc un coût total en(np)(p)et donc en ((np)p)(en s"appuyant sur le fait que le corps de la boucle externe consiste essentiellement en l"exécution complète de la boucle interne).

4 Correction de l"exercice 3.1

On étudie la recherche dichotomique dans un tableau trié :search

1search(x,tab) {

2if(tab.length == 0) {

3return -1

4} else if(tab.length == 1) {

5if(tab[0] == x) {

6return 0

7} else {

8return -1

9}

10} else {

11pos = tab.length/2

12if(tab[pos] == x) {

2

13return pos

14} else if(tab[pos] < x) {

15subpos = search(x,tab[(pos + 1):(tab.length - 1)])

16if(subpos >= 0) {

17return subpos + pos + 1

18} else {

19return -1

20}

21} else {

22subpos = search(x,tab[0:(pos - 1)])

23if(subpos >= 0) {

24return subpos

25} else {

26return -1

27}
28}
29}

On noten=tab.lengthetT(n)le nombre d"opérations réalisé dans le cas le pire par un appel à

la fonctionsearchavec comme paramètre un tableau de longueurn. La fonction étant récursive, on cherche à établir une relation de récurrence surT(n).

4.1 Casn= 0

Ce cas est facile à traiter car il correspond simplement aux lignes 2 et 3 du programme. Ces lignes effectuent un nombre constant d"opérations (deux exactement, la comparaison et la transmission du résultat). On a donc

T(0) = (1):

4.2 Casn= 1

Ce cas est aussi assez facile à traiter. Il correspond au test de la ligne 2, puis aux lignes 4 à 9.

On constate que le nombre d"opérations réalisées est de nouveau constant car chaque cas du test

(lignes 6 et 7) conduisent au même travail, à savoir renvoyer une valeur numérique. On a donc de

nouveau

T(1) = (1):

4.3 Casn >1

C"est la partie délicate de l"analyse qui correspond aux lignes 11 à 28 (après avoir réalisé

les tests en ligne 2 et 4). On fait ici une analyse dans le cas le pire car le nombre d"opérations

réalisées dépend fortement de la position dexdans le tableau. En particulier, si cette position est

tab.length/2, on réalise un nombre constant d"opérations seulement. Mais ce n"est bien entendu pas le cas le pire qui correspond au deux autres situations. On traite d"abord le castab[pos] < x, soit les lignes 14 à 20. Le programme commence par construire le sous-tableautab[(pos + 1):(tab.length - 1)]. Notons pour l"instantV(p)

le nombre d"opérations nécessaires à la construction d"un sous-tableau de longueurp. Dans le cas

présent, le sous-tableau est de longueur(n1)(bn=2c+1)+1, oùbn=2cdésigne la partie entière

den=2. La longueur du sous-tableau est donc den bn=2c 1. L"appel àsearchengendre ainsi

un nombre d"opérations deT(n bn=2c 1). Après l"exécution de l"appel récursif, le programme

passe aux lignes 16 à 20, ce qui engendre(1)opérations dans le cas le pire (on est bien dans une

analyse dans le cas le pire puisqu"on a une ligne 17 qui engendre plus d"opérations que la ligne 19

du cas contraire). Finalement, le nombre d"opérations pour le castab[pos] < xest donc de

T(n bn=2c 1) +V(n bn=2c 1) + (1):

3 Le castab[pos] > xse traite de la même façon, mais en considérant le tableautab[0:(pos -

1)]de taillebn=2c, ce qui conduit à un nombre d"opérations de

T(bn=2c) +V(bn=2c) + (1):

On peut affiner ces calculs en tenant compte de la parité den: n= 2k: on a alorsbn=2c=ket donc dans le premier cas

T(k1) +V(k1) + (1)

opérations, et dans le deuxième cas

T(k) +V(k) + (1)

opérations. Si on fait l"hypothèse naturelle queTetVsont des fonctions croissantes, l"analyse dans le cas le pire conduit à la formule de récurrence suivante :

T(2k) =T(k) +V(k) + (1):

n= 2k+ 1: on a alorsbn=2c=ket donc dans les deux cas

T(k) +V(k) + (1)

opérations, soit une relation de récurrence en

T(2k+ 1) =T(k) +V(k) + (1):

Donc finalement, on obtient la récurrence suivante :

T(n) =T(bn=2c) +V(bn=2c) + (1):

4.4 Application du théorème maître

On termine l"exercice en appliquant le théorème maître, en tenant compte des hypothèses sur

V:

1. Si on suppose que l"extraction d"un sous-tableau se fait en temps constant, on aV(p) = (1)

pour toutp. La récurrence devient alors

T(n) =T(bn=2c) + (1):

On est dans la situation du théorème maître aveca= 1,b= 2etf(n) = (1). Or,nlogba= 1, ce qui veut dire quef(n) = (nlogba)et donc que nous sommes dans le cas 2 du théorème.

On a alorsT(n) = (nlogbalogn), soit

T(n) = (logn):

2. Si on suppose que l"extraction d"un sous-tableau demande un temps proportionnel à la

longueur du sous-tableau, on aV(p) = (p). Donc la récurrence devient

T(n) =T(bn=2c) + (bn=2c):

Comme dans le cas précédent, on applique le théorème maître àa= 1etb= 2. Or (bn=2c) = (n) = (nlogba+1). De plus, on a naturellementV(bn=2c)'12

V(n), ce qui

nous place dans le cas 3 du théorème maître. On a donc

T(n) = (n):

On constate donc que la recherche dichotomique n"est intéressante que si on peut extraire un sous-tableau en temps constant. Ceci se fait sans difficulté dans la plupart des langages de pro- grammation, soit en utilisant des pointeurs (en C par exemple), soit plus en transmettant des bornes de recherche dans l"appel récursif (en Java par exemple). 4quotesdbs_dbs6.pdfusesText_12