Efficacité des algorithmes

Slides:



Advertisements
Présentations similaires
Tris.
Advertisements

Algorithmes et structures de données 7ème cours
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
la programmation en langage C
Hiérarchie mémoire Contrôle Entrées Mémoire Chemin de données Sorties.
Chap. 1 Structures séquentielles : listes linéaires
Initiation à la programmation et algorithmique cours 3
Module 6 : Programmation dynamique
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Utilisation des tableaux
Nous allons vous présenter: - Photoshop - Algorithme et programmation
Références Bibliographiques
INFOR 101 Chapitre 3 Marianne Morris.
Introduction à l’algorithmique
Démarche de résolution de problèmes
Analyse des algorithmes: une introduction
Les algorithmes: complexité et notation asymptotique
Methode de Tri efficace
Travail Pratique – Conception et analyse d’algorithmes
IFT-2000: Structures de Données Introduction à lanalyse dalgorithmes Dominic Genest, 2009.
CYCLE 1 : Saisir – Afficher – Données Déclarer des Constantes dans un programme 1- Rôle de la déclaration de constante 2- Syntaxe de la déclaration de.
Analyse d’Algorithmes
Analyse d’algorithmes
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT-10541
Structures de données IFT-2000
Mesurer l’efficacité des algorithmes
Introduction à l’algorithmique
IFT Complexité et NP-complétude
Gestion de Fichiers Tri Interne Efficace et Tri Externe.
Algorithmes probabilistes
Analyse des algorithmes: une introduction. La question abord é e dans ce chapitre est la suivante: Comment choisir parmi les diff é rentes approches pour.
Efficacité des algorithmes
Analyse des algorithmes
Gestion de Fichiers GF-10: Traitement Co-Sequentiel: Appariment et Fusion de Plusieures Listes (Base sur les sections de Folk, Zoellick & Riccardi,
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
ASI 3 Méthodes numériques pour l’ingénieur
Analyse des Algorithmes
Plan cours La notion de pointeur et d’adresse mémoire.
Analyse d’algorithmes
Efficacité des algorithmes
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
ALGORITHME DE TRI Le tri par insertion.
O-notation 1. Introduction 2. O-notation 3. Opérations 3.1 Somme 3.2 Produit 4. Règles générales 5. Exemple 6.Analyse des algorithmes récursifs 6.1 Dilatation.
Programmation linéaire en nombres entiers
Cours 4 - Trois algorithmes de recherche dans un tableau
Structures de contrôle
ETNA – 1ème année Guillaume Belmas –
GF-11: Tri Interne Efficace et Tri Externe
2008/ Plan du cours 1.Introduction –Contenu du cours 2.Logique mathématique –Calcul propositionnel –Calcul des prédicats –Logique floue et aide à.
Les tris Tri Action de mettre une structure de données en ordre (croissant ou décroissant). Le plus simple est d’insérer en ordre. Les algorithmes de tri.
Cours LCS N°4 Présenté par Mr: LALLALI
Recherche de motifs par projections aléatoires
MATHÉMATIQUES DISCRÈTES Chapitre 2 (section 2) François Meunier DMI.
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
Pour les boucles FOR on a fait intervenir la boucles TANT QUE équivalentes dont on connaît calculer le temps d’exécution. Toutes le procédures de comptage.
Algorithmes de tri.
1 Algorithmique, cours 3 Septembre Les fonctions 1. Motivation 2. Définitions 3. Utilisation des fonctions 4. Déclaration des fonctions 5. Liens.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Structures de données IFT-2000
CSI2510 Structures de données et algorithmes Analyse des algorithmes
CSI25101 Tri Plus efficace. CSI25102 Tri récursif Le tri récursif divise les données de grande taille en deux presque moitiés et est appelé récursivement.
Algorithmes parallèles
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur : temps de calcul pour exécuter les opérations, et l'occupation de la.
Algorithmes Branch & Bound Module IAD/RP/RO Master d ’informatique Paris 6 Philippe Chrétienne.
Complexité algorithmique
Les tris Tri Action de mettre une structure de données en ordre (croissant ou décroissant). Le plus simple est d’insérer en ordre. Les algorithmes de tri.
Transcription de la présentation:

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.

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: (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.

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: 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.

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

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.

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).

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.

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).

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

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.

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.

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.

(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)

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.

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.

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.

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.

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.

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.

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.

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.

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.

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).

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).

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).

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

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

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.

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.

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

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.