Efficacité des algorithmes Comment choisir parmi les différentes approches pour résoudre un problème? 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.
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?
Comment mesurer l’efficacité? Comparaison empirique: coder et exécuter le programme Analyse théorique (asymptotique) 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 positive 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.
Analyse théorique On compte le nombre d’opérations élémentaires en fonction de la longueur de l’entrée. Exemple: Problème Op. élémentaire Trouver x dans un tableau Comparaison de x avec les éléments du tableau Multiplier 2 matrices Multiplication scalaire Trier un tableau Comparaison entre deux éléments du tableau Parcourir un arbre Visiter un noeud 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.
Analyse théorique La longueur de l’entrée dépend du problème. Exemple: Trier un tableau Nombre d’éléments dans le tableau Multiplier deux matrices Dimension des matrices Parcourir un arbre binaire Nombre de noeuds Résoudre un système d’équations linéaires Nombre d’inconnues ou d’équations Résoudre un problème de graphe Nombre de nœuds et/ou nombre d’arêtes 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.
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
Exemples (suite) Exemple 2: int médiane(int T[], int n) { return T(n/2); } 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.
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
Taux de croissance
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: On commence au début du tableau et regarde chaque élément jusqu’à ce que l’élément cherché soit trouvé. Meilleur cas: 1 comparaison Pire cas: n comparaisons Cas moyen: n/2 comparaisons 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.
Compromis espace-temps Deux situations: Lorsqu'on peut réduire le temps de calcul en utilisant plus d'espace mémoire: Exemple: table de conversion (look-up table). Lorsqu'on peut réduire l'espace mémoire au prix d'un temps d'exécution plus long: Exemple: compression de données 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.