[PDF] [PDF] Complexité algorithmique - MIS





Previous PDF Next PDF



Complexité algorithmique

9 sept. 2021 le cas de boucles imbriquées on calculera d'abord la complexité de la boucle interne car on en a besoin pour.



Complexité dun algorithme

Il comprend deux boucles imbriquées chacune effectuant n répétitions de son corps ; le corps de la boucle interne ne comporte qu'une multiplication.



Complexité

4. de la complexité en temps de l'algorithme «abstrait» sous-jacent. Théorème 1 La complexité de p boucles imbriquées de 1 à n ne contenant que.



Complexité algorithmique

Exemple : algorithmes avec deux boucles imbriquées. Tris à bulle par insertion et par sélection. O(ni) : complexité polynomiale



Complexité dun algorithme I Généralités

) ? 2n. Comme l'instruction x += 1 de la boucle en j est réalisée en O(1) la complexité temporelle dans le pire des cas des boucles imbriquées sur i et j est 



1. BOUCLES ET COMPLEXITE

BOUCLES ET COMPLEXITE. A. Le langage de programmation Java. Java est un langage de programmation normalisé. Le mot Java est une marque déposée par la firme 



Complexité des Algorithmes A) Introduction

Ce que l'on entend par complexité des algorithmes est une évaluation du coût Exemple-4 (deux boucles imbriquées sans dépendance des indices).



Algorithmique Notion de complexité

complexité temporelle : (ou en temps) : temps de calcul ; La complexité (théorique) est un ordre de grandeur de ces ... Cas des boucles imbriquées.



Jointures par boucles imbriquées

Si une table tient en mémoire : jointure par boucle imbriquées ou hachage. • Si au moins un index est utilisable : jointure par boucle imbriquées indexée.



Algorithmique Notion de complexité

complexité temporelle : (ou en temps) : temps de calcul ; La complexité (théorique) est un ordre de grandeur de ces ... Cas des boucles imbriquées.



[PDF] Complexité algorithmique - Université Grenoble Alpes

Comme établi précédemment pour une boucle on fait la somme des complexités de chaque itération Dans le cas de boucles imbriquées on calculera d'abord la 



[PDF] Complexité dun algorithme I Généralités

La complexité temporelle des boucles imbriquées est donc en O(n2) Par somme la complexité temporelle dans le pire des cas de la fonction f1 est en O(n2) Q2 



[PDF] Complexité algorithmique - MIS

O(ni) : complexité polynomiale quand le paramètre double le temps d'exécution est multiplié par 2i Exemple : algorithme utilisant i boucles imbriquées O(in) 



[PDF] Calculs de complexité dalgorithmes

?Complexité des algorithmes ?Exemples de calcul de complexité boucles for imbriquées chacune d'elle de la forme for (int i



[PDF] Complexité des Algorithmes A) Introduction - LIPN

Ce que l'on entend par complexité des algorithmes est une évaluation du coût Exemple-4 (deux boucles imbriquées sans dépendance des indices)



[PDF] Complexité dun algorithme - Alexandre Benoit

Il comprend deux boucles imbriquées chacune effectuant n répétitions de son corps ; le corps de la boucle interne ne comporte qu'une multiplication



[PDF] TP 3 : Boucles et boucles imbriquées I Rappels

Et par exemple d'augmenter de 10 l'indice de la suite multiplie environ par 100 le temps de calcul Exercice 11 Évaluer la complexité des algorithmes 



[PDF] 1 BOUCLES ET COMPLEXITE

BOUCLES ET COMPLEXITE A Le langage de programmation Java Java est un langage de programmation normalisé Le mot Java est une marque déposée par la firme 



[PDF] Exemples de boucles imbriquées

boucle ? ou : on parle de boucles imbriquées (la 1e boucle est dite Commenté [AM1]: Nous disons que la complexité de cet



[PDF] Complexité des algorithmes - Pr Abdelhamid Djeffal

On cherche à mesurer la complexité d'un algorithme indépendamment de la La complexité d'une boucle est égale à la somme sur toutes les itérations de la 

  • Comment mesurer la complexité ?

    Réaliser un calcul de complexité en temps revient à compter le nombre d'opérations élémentaires (affectation, calcul arithmétique ou logique, comparaison…) effectuées par l'algorithme.
  • Comment déterminer la complexité d'un algorithme ?

    Pour calculer la complexité d'un algorithme: On calcule la complexité de chaque partie de l'algorithme. On combine ces complexités conformément aux règles déjà vues. On effectue sur le résultat les simplifications possibles déjà vues.
  • Comment déterminer la complexité d'une fonction ?

    On mesure alors la complexité en temps d'un algorithme comme le nombre de ces opérations élémentaires. Par exemple, en considérant élémentaire l'addition de 2 chiffres, poser l'addition de deux nombres de n chiffres nous fera effectuer n additions à 1 chiffre, la complexité sera donc de n.
  • ? La complexité d'un algorithme est la quantité de ressources nécessaires pour traiter des entrées. On la voit comme une fonction de n, la taille de l'entrée. ? Les principales ressources mesurées sont le temps (nombre d'instructions utilisées) et l'espace (quantité d'espace mémoire nécessaire).
[PDF] Complexité algorithmique - MIS Algorithmique et Programmation1Objectifs des calculs de complexité : - pouvoir prévoir le temps d'exécution d'un algorithme - pouvoir comparer deux algorithmes réalisant le même traitement In almost every computation a great variety of arrangements for the succession of the processes is possible, and various considerations must influence the selection amongst them for the purposes of a Calculating Engine. One essential object is to choose that arrangement which shall tend to reduce to a minimum the time necessary for completing the calculation. Ada Lovelace (1815-1852) - Notes on the Sketch of The Analytical Engine.Complexité algorithmique

Algorithmique et Programmation2Exemple : échange de deux valeurs entièresComplexité en temps et en espace

// échange des valeurs de deux variables x et y entier x, y, z; ... // initialisation de x et y z <- x; x <- y; y <- z; // échange des valeurs de deux variables x et y entier x, y; ... // initialisation de x et y x <- y-x; y <- y-x; x <- y+x; - la première méthode utilise une variable supplémentaire et réalise 3 affectations - la deuxième méthode n'utilise que les deux variables dont on veut échanger les valeurs, mais réalise 3 affectations et 3 opérations

Algorithmique et Programmation3La complexité d'un algorithme peut être évalué en temps et en espace :

- complexité en temps : évaluation du temps d'exécution de l'algorithme - complexité en espace : évaluation de l'espace mémoire occupé par l'exécution de l'algorithme Règle (non officielle) de l'espace-temps informatique : pour gagner du temps de calcul, on doit utiliser davantage d'espace mémoire. On s'intéresse essentiellement à la complexité en temps (ce qui n'était pas forcément le cas quand les mémoires coutaient cher)Espace-temps informatique

Algorithmique et Programmation4Le paramètre de la complexité est la donnée du traitement qui va (le plus) faire

varier le temps d'exécution de l'algorithme.

Exemple : calcul de la factorielle

Le paramètre de complexité est la valeur de n

Exemple : multiplication de deux entiers

Paramètre de complexité?Paramètre de complexité (1/3) fonction avec retour entier factorielle(entier n) entier i, resultat; début resultat <- 1; pour (i allant de 2 à n pas 1) faire resultat <- resultat*i; finpour retourne resultat; fin fonction avec retour entier multi(entier n, entier m) début retourne n*m; fin

Algorithmique et Programmation5Exemple : multiplier tous les éléments d'un tableau d'entiers par un entier donné

Paramètre de complexité?

Exemple : somme des premiers éléments de chaque ligne d'un tableau à deux dimensions Paramètre de complexité?Paramètre de complexité (2/3) fonction sans retour multiplie(entier tab[], entier x) entier i; début pour (i allant de 0 à tab.longueur-1 pas de 1) faire tab[i] <- tab[i] * x; finpour fin fonction avec retour entier sommeTeteLigne(entier tab[][]) entier i,s; début s <- 0; pour (i allant de 0 à tab[0].longueur-1 pas de 1) faire s <- s + tab[0][i]; finpour retourne s; fin

Algorithmique et Programmation6Pour un même algorithme, différents choix de paramètre de complexité peuvent

être possible. Plusieurs complexités peuvent être calculées, selon les besoins.

Exemple : fusion de deux tableaux

Paramètre de complexité?Paramètre de complexité (3/3) fonction avec retour entier[] fusion(entier tab1[], entier tab2[]) entier i, t[tab1.longueur+tab2.longueur]; début pour (i allant de 0 à t.longueur-1 pas de 1) faire si (iAlgorithmique et Programmation7L'idée est d'évaluer le temps de calcul indépendamment de toute implémentation

et de tout contexte d'exécution. Exemple : la factorielle, le paramètre de complexité est la valeur de n On doit fixer des temps d'exécution constants à chaque type d'instruction : - affectation d'entier : ae - comparaison d'entier : ce - opération élémentaire sur des entiers : oe

On peut négliger le coût des déclarations, des affectations et du retour.Calcul de complexité (1/2)

fonction avec retour entier factorielle1(entier n) entier i, resultat; début resultat <- 1; pour (i allant de 2 à n pas 1) faire resultat <- resultat*i; finpour retourne resultat; fin Algorithmique et Programmation8Calcul de complexité (2/2) resultat <- 1; pour (i allant de 2 à n pas 1) faire resultat <- resultat*i; finpourae * (ae + oe)(n-1)+On fait la somme du temps d'exécution de toutes les instructions : Au total, le temps d'exécution sera de la forme a*n+b avec n comme paramètre de complexité et a et b des constantes. Il n'est pas possible de fixer des valeurs numériques aux constantes, qui dépendent du langage d'implémentation et du contexte d'exécution. On se contente donc de déterminer la forme générale de la complexité.

Algorithmique et Programmation9Exemple : recherche séquentielle dans un tableau de n chaines de caractères

Le paramètre de complexité est la taille du tableau d'entrée, n. Le nombre de tours de boucles varie selon que x est dans le tableau ou pas, et selon l'endroit où x est présent.Complexité au mieux et au pire (1/4) fonction avec retour booléen rechercheElement(chaine tab[], chaine x) entier i; booléen b; début b <- FAUX; i <- 0; tantque (i < tab.longueur ET non b) faire si (tab[i] = x) alors b <- VRAI; finsi i <- i+1; fintantque retourne b; fin

Algorithmique et Programmation10Si x est dans la première case du tableau : 1 tour de boucle avec la condition

tab[i]=x vraie Si x est dans la deuxième case du tableau : 1 tour de boucle avec la condition tab[i]=x fausse et 1 tour de boucle avec la condition tab[i]=x vraie Si x est dans dernière case du tableau : tab.longueur-1 tours de boucle avec la condition tab[i]=x fausse et 1 tour de boucle avec la condition tab[i]=x vraie Si x n'est pas dans le tableau : tab.longueur tours de boucle avec la condition tab[i]=x fausse Complexité au mieux et au pire (2/4) fonction avec retour booléen rechercheElement(chaine tab[], chaine x) entier i; booléen b; début b <- FAUX; i <- 0; tantque (i < tab.longueur ET non b) faire si (tab[i] = x) alors b <- VRAI; finsi i <- i+1; fintantque retourne b; fin

Algorithmique et Programmation11Lorsque, pour une valeur donnée du paramètre de complexité, le temps

d'exécution varie selon les données d'entrée, on peut distinguer : - La complexité au pire : temps d'exécution maximum, dans le cas le plus défavorable. - La complexité au mieux : temps d'exécution minimum, dans le cas le plus favorable (en pratique, cette complexité n'est pas très utile). - La complexité moyenne : temps d'exécution dans un cas médian, ou moyenne des temps d'exécution. Le plus souvent, on utilise la complexité au pire, car on veut borner le temps d'exécution.Complexité au mieux et au pire (3/4)

Algorithmique et Programmation12n = la taille du tableau, ae = affectation d'entier, ce = comparaison d'entier,

oe=opération sur les entiers. Complexité au pire (x n'est pas dans le tableau) : 2*ae+n*(2*ce+3*oe+ae) Complexité au mieux (x est dans la première case du tableau) : 2*ae+2*ce+2*oe Complexité en moyenne : considérons qu'on a 50% de chance que x soit dans le tableau, et 50% qu'il n'y soit pas, et s'il y est sa position moyenne est au milieu. Le temps d'exécution est [ (2*ae+n*(2*ce+3*oe+ae)) +

(2*ae+(n/2)*(2*ce+3*oe+ae)) ] /2, de la forme a*n+b (avec a et b constantes)Complexité au mieux et au pire (4/4)

fonction avec retour booléen rechercheElement(chaine tab[], chaine x) entier i; booléen b; début b <- FAUX; i <- 0; tantque (i < tab.longueur ET non b) faire si (tab[i] = x) alors b <- VRAI; finsi i <- i+1; fintantque retourne b; fin

Algorithmique et Programmation13Les complexités algorithmiques théoriques sont toujours des approximations :

Première approximation : on ne calcule que la forme générale de la complexité Deuxième approximation : on ne considère souvent que la complexité au pire Troisième approximation : on ne regarde que le comportement asymptotique de la complexité car le temps de calcul ne pose pas de problème lorsqu'on traite des données peu volumineuses.Complexité asymptotique temps de calcul paramètre de complexité0100000

Algorithmique et Programmation14f et g étant des fonctions, f = O(g) s'il existe des constantes c>0 et n0 telles que

f(x) < c*g(x) pour tout x > n0 f = O(g) signifie que f est dominée asymptotiquement par g ou que g domine asymptotiquement f.Notation de Landau (1/2) n0f(x) xc*g(x)

Algorithmique et Programmation15La notation O, dite notation de Landau, vérifie les propriétés suivantes :

- si f=O(g) et g=O(h) alors f=O(h) - si f=O(g) et k un nombre, alors k*f=O(g) - si f1=O(g1) et f2=O(g2) alors f1+f2 = O(g1+g2) - si f1=O(g1) et f2=O(g2) alors f1*f2 = O(g1*g2)

Exemples de domination asymptotique :

x = O(x2) car pour x>1, x1, x2100*x = O(x2) car pour x>100, x ln(x) = O(x) car pour x>0, ln(x)0, xi = O(ex) car pour x tel que x/ln(x)>i, xi0 et n0 telles que f(x) ≥ c*g(x) pour tout x ≥ n0 Notation de Landau (2/2)

Algorithmique et Programmation16f et g étant des fonctions, f = Θ(g) s'il existe des constantes c1, c2, strictement

n0f(x) xc2*g(x) c1*g(x)

Algorithmique et Programmation17O(1) : complexité constante, pas d'augmentation du temps d'exécution quand le

paramètre croit O(log(n)) : complexité logarithmique, augmentation très faible du temps d'exécution quand le paramètre croit. Exemple : algorithmes qui décomposent un problème en un ensemble de problèmes plus petits (dichotomie). O(n) : complexité linéaire, augmentation linéraire du temps d'exécution quand le paramètre croit (si le paramètre double, le temps double). Exemple : algorithmes qui parcourent séquentiellement des structures linéaires. O(nlog(n)) : complexité quasi-linéaire, augmentation un peu supérieure à O(n). Exemple : algorithmes qui décomposent un problème en d'autres plus simples, traités indépendaments et qui combinent les solutions partielles pour calculer la solution générale. Tris fusion et rapide.Classes de complexité (1/2)

Algorithmique et Programmation18O(n2) : complexité quadratique, quand le paramètre double, le temps d'exécution

est multiplié par 4. Exemple : algorithmes avec deux boucles imbriquées. Tris à bulle, par insertion et par sélection. O(ni) : complexité polynomiale, quand le paramètre double, le temps d'exécution est multiplié par 2i. Exemple : algorithme utilisant i boucles imbriquées. O(in) : complexité exponentielle, quand le paramètre double, le temps d'exécution est élevé à la puissance 2. O(n!) : complexité factorielle, asymptotiquement équivalente à nn Les algorithmes de complexité polynomiale ne sont utilisables que sur des données réduites, ou pour des traitements ponctuels (maintenance, ...).

Les algorithmes exponentiels ou au delà ne sont pas utilisables en pratique.Classes de complexité (2/2)

Algorithmique et Programmation19Complexité algorithmique et puissance des machines Temps de calcul pour des données de taille 1 million en fonction de la puissance de la machine (en flops) et de la complexité de l'algorithme Loi de Moore (empirique) : à coût constant, la rapidité des processeurs double tous les 18 mois (les capacités de stockage suivent la même loi). Constat : le volume des données stockées dans les systèmes d'informations augmente de façon exponentielle. Conclusion : il vaut mieux optimiser ses algorithmes qu'attendre des années qu'un processeur surpuissant soit inventé. flopsln(n)nn²2n

1060,013ms1s278 heures10000 ans

1090,013μs1ms¼ heure10 ans

10120,013ns1μs1s1 semainecomplexité

Algorithmique et Programmation20Le paramètre de complexité est la longueur du tableau, qu'on appelle n.

n = la taille du tableau, a = affectation, c = comparaison o = opération Complexité au pire (x n'est pas dans le tableau) : 2*a+n*(2*c+a+3*o) = O(n) Complexité au mieux (x est dans la case 0 du tableau) : 2*a+2*c +2*o = O(1) Complexité en moyenne : considérons qu'on a 50% de chance que x soit dans le tableau, et 50% qu'il n'y soit pas, et, s'il y est sa position moyenne est au milieu. Le temps d'exécution est [ (2*a+n*(2*c+a+3*o)) + (2*a+(n/2)*(2*c+a+3*o)) ] /2, de

la forme α*n+β (avec α et β constantes) = O(n)Complexité de la recherche séquentielle

fonction avec retour booléen rechercheElement(chaine tab[], chaine x) entier i; booléen b; début b <- FAUX; i <- 0; tantque (i < tab.longueur ET non b) faire si (tab[i] = x) alors b <- VRAI; finsi i <- i + 1; fintantque retourne b; fin

Algorithmique et Programmation21Le paramètre de complexité est la longueur du tableau, qu'on appelle n.

Cas au pire : x n'est pas dans le tableau.

La longueur de la partie du tableau comprise entre i et j est d'abord n, puis n/2, puis n/4, ...., jusqu'à ce que n/2t = 1. Le nombre de tours de boucles est donc un entier t tel que n/2t = 1 soit 2t = n soit t*log(2) = log(n) soit t = log2(n)

Complexité au pire : 3*a + o + (9*o + 3*c + a)*log2(n) = O(log(n))Complexité de la recherche dichotomique

fonction avec retour booléen rechercheDicho(chaine tab[], chaine x) entier i, j; booléen b; début b <- FAUX; i <- 0; j <- tab.longueur-1; tantque (i <= j ET non b) faire si (tab[(j+i)/2] = x) alors b <- VRAI; sinon si (tab[(j+i)/2] > x) alors j <- (j+i)/2 - 1; sinon i <- (j+i)/2 + 1; finsi finsi fintantque retourne b; fin

Algorithmique et Programmation22Le paramètre de complexité est la longueur du tableau, qu'on appelle n.

Cas au pire : la conditionnelle est toujours vraie, c'est-à-dire que les éléments sont triés dans l'ordre inverse de celui voulu Complexité au pire : remonter le premier élément nécessite (n-1) tours de la boucle imbriquée, remonter le deuxième nécessite (n-2) tours, etc. Donc le

nombre de tours total est (n-1) + (n-2) + ... + 1 = n*(n-1)/2 soit O(n2).Complexité du tri à bulle

fonction sans retour triBulle(entier tab[]) entier i,j,temp; début pour (i allant de tab.longueur-2 à 1 pas -1) faire pour (j allant de 0 à i pas 1) faire si (tab[j] > tab[j+1]) alors temp <- tab[j]; tab[j] <- tab[j+1]; tab[j+1] <- temp; finsi finpour finpour finquotesdbs_dbs28.pdfusesText_34
[PDF] calcul de complexité python

[PDF] masse et quantité de matière exercice

[PDF] l'alcool utilisé comme antiseptique local peut être

[PDF] production primaire nette

[PDF] productivité nette de l'écosystème

[PDF] production primaire et secondaire

[PDF] productivité nette de l écosystème

[PDF] taux d'évolution calcul

[PDF] taux d'endettement entreprise

[PDF] numero ine sur internet

[PDF] inscription lycée hors secteur

[PDF] nombre de mole formule

[PDF] nombre de mole d'un gaz

[PDF] nombre d'oxydation exercices corrigés

[PDF] exercices priorités opératoires 5ème pdf