La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Efficacité des algorithmes

Présentations similaires


Présentation au sujet: "Efficacité des algorithmes"— Transcription de la présentation:

1 Efficacité des algorithmes
Comment choisir parmi les différentes approches pour résoudre un problème? Exemple: Liste chaînée ou tableau? 2 objectifs à atteindre: Concevoir un algorithme facile à comprendre, coder et déboguer. Concevoir un algorithme qui utilise de façon efficace les ressources de l’ordinateur.

2 Efficacité des algorithmes(suite)
Objectif (1): concerne le génie logiciel Objectif (2): Algorithmes et structures de données. Lorsque l’objectif (2) est important, comment peut-on mesurer l’efficacité d’un algorithme?

3 Comment mesurer l’efficacité?
Comparaison empirique: (exécuter le programme) Analyse assymptotique d’algorithmes Ressources critiques: temps, espace mémoire,... Facteurs affectant le temps d’exécution: machine, language, programmeur, compilateur, algorithme et structure de données. En général, le temps d’exécution dépend de la longueur de l’entrée. Ce temps est une fonction T(n) où n est la longueur de l’entrée. Empirical comparison is difficult to do “fairly” and is time consuming. Critical resources: Time. Space (disk, RAM). Programmers effort. Ease of use (user’s effort). Factors affecting running time: Machine load. OS. Compiler. Problem size. Specific input values for given problem size.

4 Exemples Exemple 1. // Retourne l’indice du plus grand élément
int PlusGrand(int T[], int n) { int max = 0; for (int i=1; i<n; i++) if (T[max] < T[i]) max = i; return max; } As n grows, how does T(n) grow? Cost: T(n) = c1n + c2 steps

5 Exemples (suite) Exemple 2: x=3; Exemple 3: sum = 0;
for (i=1; i<=n; i++) for (j=1; j<=n; j++) sum++; } Example 2: Constant cost. Example 3: Cost: T(n) = c1n2 + c2. Roughly n2 steps, with sum being n2 at the end. Ignore various overhead such as loop counter increments.

6 Meilleur algorithme ou ordinateur?
How much speedup? 10 times. More important: How much increase in problem size for same time expended? That depends on the growth rate. n: Size of input that can be processed in one hour (10,000 steps). n’: Size of input that can be processed in one our on the new machine (100,000 steps). Note: for 2n, if n = 1000, then n’ would be 1003. On suppose que l’ordinateur utilisé peut effectuer 106 opérations à la seconde

7 Taux de croissance

8 Analyse assymptotique: Grand O
Définition: T(n) est dans O(f(n)) s’il existe deux constantes positives c et n0 t.q. T(n)  cf(n) pour tout n > n0. Utilité: Simplifie l'analyse Signification: Pour toutes les grandes entrées (i.e., nn0), on est assuré que l’algorithme ne prend pas plus de cf(n) étapes.  Borne supérieure. Must pick one of [best, average, worst] to complete the statement. Big-oh notation applies to some set of bounds.

9 Notation grand-O (suite)
La notation grand-O indique une borne supérieure sur le temps d’exécution. Exemple: Si T(n) = 3n2 +2 alors T(n)  O(n2). On désire le plus de précision possible: Bien que T(n) = 3n2 +2  O(n3), on préfère O(n2). It provides more information in this example to say O(n2) than O(n3).

10 Grand-O: Exemples Exemple 1: Initialiser un tableau d’entiers
for (int i=0; i<n; i++) Tab[i]=0; Il y a n itérations Chaque itération nécessite un temps  c, où c est une constante. Le temps est donc T(n)  cn Donc T(n)  O(n) We are doing average case. cs is a constant. The actual value is irrelevant.

11 Grand-O: Exemples Exemple 2: T(n) = c2n2 + c1n + c0 .
c2n2 + c1n +c0  c2n2 + c1n2 +c0n2 = (c2 + c1 + c0)n2 pour tout n  1. T(n)  cn2 où c = c2 + c1 + c0 Donc, T(n) est dans O(n2).

12 Grand-O: Exemples Exemple 3: Lorsque T(n) = c, où c est une constante,
on écrit T(n)  O(1).

13 Grand-Omega Definition: On a T(n)  (g(n)) s'il existe deux constantes positives c et n0 telles que T(n)  cg(n) pour tout n > n0. Signification: Pour de grandes entrées, l’exécution de l’algorithme nécessite au moins cg(n) étapes.  Borne inférieure.

14 Grand-Omega: Exemple T(n) = 3n2 + 2n+ 5
3n2 + 2n + 5  3n2 pour tout n > 0. T(n)  cn2 pour c = 3 et n>0. Donc, T(n)  (n2) par la définition.

15 La notation Theta Lorsque le grand-O et le grand-omega d’une fonction coïncident, on utilise alors la notation grand-theta. Définition: Le temps d’exécution d’un algorithme est dans (h(n)) s’il est à la fois dans O(h(n)) et dans (h(n)). For polynomial equations on T(n), we always have . There is no uncertainty, since once we have the equation, we have a “complete” analysis.

16 (lg n)  (n)  (n2)  (n3)  (2n)
Exemple (n) (n2) (n3) (2n) (lg n) How much speedup? 10 times. More important: How much increase in problem size for same time expended? That depends on the growth rate. n: Size of input that can be processed in one hour (10,000 steps). n’: Size of input that can be processed in one our on the new machine (100,000 steps). Note: for 2n, if n = 1000, then n’ would be 1003. (lg n)  (n)  (n2)  (n3)  (2n)

17 Pire cas, meilleur cas et cas moyen
Toutes les entrées d’une longueur donnée ne nécessitent pas le même temps d’exécution. Exemple: Recherche séquentielle dans un tableau de taille n: Commencer au début du tableau et considérer chaque élément jusqu’à ce que l’élément cherché soit trouvé. Meilleur cas: (1) Pire cas: (n) Cas moyen: (n) Best: Find at first position. Cost is 1 compare. Worst: Find at last position. Cost is n compares. Average: (n+1)/2 compares IF we assume the element with value K is equally likely to be in any position in the array.

18

19 Une erreur fréquente “Le meilleur cas pour mon algorithme est n=1 car c’est le plus rapide.” FAUX! On utilise la notation grand-O parce qu’on s’intéresse au comportement de l’algorithme lorsque n augmente. Meilleur cas: on considère toutes les entrées de longueur n. We are doing average case. cs is a constant. The actual value is irrelevant.

20 Règles de simplification 1
f(n) O(g(n)) et g(n)  O(h(n)), alors f(n)  O(h(n)). 2. Ignore constants. 3. Drop low order terms. 4. Useful for analyzing loops.

21 Règles de simplification 2
f(n)  O(kg(n)) où k >0 est une constante alors f(n)  O(g(n)). 2. Ignore constants. 3. Drop low order terms. 4. Useful for analyzing loops.

22 Règles de simplification 3
f1(n)  O(g1(n)) et f2(n)  O(g2(n)), alors f1(n) + f2(n)  O(max(g1(n), g2(n))). Exemple: n + nlog n  O(nlog n) 2. Ignore constants. 3. Drop low order terms. 4. Useful for analyzing loops.

23 Règles de simplification 4
f1(n)  O(g1(n)) et f2(n)  O(g2(n)) alors f1(n)*f2(n)  O(g1(n) * g2(n)) Exemple: (3n2 +3)(n2+5nlog n)  O(n4) 2. Ignore constants. 3. Drop low order terms. 4. Useful for analyzing loops.

24 Règles de simplification 5
Si p(n) est un polynôme de degré k alors p(n)  (nk) 2. Ignore constants. 3. Drop low order terms. 4. Useful for analyzing loops.

25 Règles de simplification 6
logk n  O(n) pour toutes constantes k>0 et >0 2. Ignore constants. 3. Drop low order terms. 4. Useful for analyzing loops.

26 Exemples Exemple 1: a = b; Temps constant: (1). Exemple 2: somme = 0;
for (i=1; i<=n; i++) somme += n; Temps: (n) Asymptotic analysis is defined for equations. We need to convert programs to equations to analyze them. The traditional notation is (1), not (c). (n) even though the value of sum is n2.

27 Exemples Exemple 3: On peut montrer : (n2) somme = 0;
for (i=1; i<=n; i++) for (j=1; j<=i; j++) somme++; Temps: (1) + O(n2) = O(n2) On peut montrer : (n2) First loop, sum is n2. Second loop, sum is (n+1)(n)/2. Both are (n2).

28 Exemples Exemple 4: somme = 0; for (j=1; j<=n; j++)
for (i=1; i<=n; i++) somme++; for (k=0; k<n; k++) A[k] = k; Temps: (1) + (n2) + (n) = (n2) First statement is (1). Double for loop is i = (n2). Final for loop is (n). Result: (n2).

29 Exemples Example 5: somme = 0; for (k=1; k<=n; k*=2)
for (j=1; j<=n; j++) somme++; Temps: (nlog n) First loop is n for k = 1 to log n, or (n log n). Second loop is 2k for k = 0 to log n - 1, or (n).

30 Recherche dychotomique
// Retourne la position de l’élément K // dans un tableau trié de taille n int dycho(int tab[], int n, int K) { int l = 0; int r = n-1; while (l <= r) { int m = (l+r)/2; if (tab[m] < K) l=m+1; else if (tab[m] > K) r=m-1; else return m; } return n; // K n'est pas dans tab

31 Recherche dychotomique
Combien d’éléments sont examinés dans le pire cas?

32 Autres exemples Instruction if: maximum entre le if et le then
switch: maximum entre les différents cas Appels de fonction: Temps d’exécution de la fonction if statement: The probabilities for the then/else clauses being executed must be independent of n. switch statement: The probabilities of the various clauses being executed must be independent of n.

33 Analyse de problèmes Borne supérieure: Borne supérieur sur le meilleur algorithme connu. Borne inférieure: Borne inférieure sur tous les algorithmes possibles. Exemple: Trier un tableau de taille n nécessite O(n) étapes et peut se faire en O(nlog n) étapes. Analyzing problems is done a lot in a senior algorithms class.

34 Espace mémoire La quantité d’espace mémoire utilisé peut aussi être étudiée à l’aide de l’analyse assymptotique. En général: Temps: Algorithme manipulant les structures de données. Espace: Structure de données

35 Le principe du compromis espace/temps
Il est souvent possible de réduire le temps d’exécution au prix d’augmenter l’espace mémoire et vice versa. Fichiers compressés Table des valeurs d’une fonctions Espace disque: Un programme sera d’autant plus rapide qu’il requiert peu d’accès disque.


Télécharger ppt "Efficacité des algorithmes"

Présentations similaires


Annonces Google