NFP136- Cours 2 ALGORITHMES ET COMPLEXITÉ. Définition d'un algorithme Un exemple Présentation des algorithmes Évaluation d'un algorithme Complexité



Documents pareils
Recherche dans un tableau

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

1 Recherche en table par balayage

Algorithmique I. Algorithmique I p.1/??

Architecture des Systèmes d Information Architecture des Systèmes d Information

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Quelques Algorithmes simples

Chapitre 7. Récurrences

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

4. Les structures de données statiques

Java Licence Professionnelle CISII,

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

I. Introduction aux fonctions : les fonctions standards

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TD3: tableaux avancées, première classe et chaînes

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Corrigé des TD 1 à 5

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.


Programmation C++ (débutant)/instructions for, while et do...while

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Plan du cours. Historique du langage Nouveautés de Java 7

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Algorithmique, Structures de données et langage C

Programmer en JAVA. par Tama

Corrigé des exercices sur les références

Chapitre 10. Les interfaces Comparable et Comparator 1

Algorithmique et Programmation, IMA

Licence Sciences et Technologies Examen janvier 2010

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Package Java.util Classe générique

Cours d Algorithmique et de Langage C v 3.0

Initiation à la programmation en Python

Bases de programmation. Cours 5. Structurer les données

Algorithmes récursifs

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Généralités sur le Langage Java et éléments syntaxiques.

MIS 102 Initiation à l Informatique

Les arbres binaires de recherche

Introduction à MATLAB R

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Définitions. Numéro à préciser. (Durée : )

as Architecture des Systèmes d Information

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Rappels sur les suites - Algorithme

Introduction au langage C

Chapitre 5 : Flot maximal dans un graphe

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

STAGE IREM 0- Premiers pas en Python

2. Comprendre les définitions de classes

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

TP, première séquence d exercices.

CORRECTION EXERCICES ALGORITHME 1

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

ARBRES BINAIRES DE RECHERCHE

Feuille TD n 1 Exercices d algorithmique éléments de correction

L ALGORITHMIQUE. Algorithme

Programmation Objet - Cours II

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Limites finies en un point

Arbres binaires de recherche

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

TD/TP PAC - Programmation n 3

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Fonctions de plusieurs variables : dérivés partielles, diérentielle. Fonctions composées. Fonctions de classe C 1. Exemples

Programmation avec des objets : Cours 7. Menu du jour

Programmation linéaire

Algorithmique et Programmation

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Projet de programmation (IK3) : TP n 1 Correction

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Exercices sur les interfaces

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Nombres premiers. Comment reconnaître un nombre premier? Mais...

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Propagation sur réseau statique et dynamique

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Objets et Programmation. origine des langages orientés-objet

Programmation en Java IUT GEII (MC-II1) 1

Chapitre 2 Devine mon nombre!

Utilisation d objets : String et ArrayList

Raisonnement par récurrence Suites numériques

Premiers Pas en Programmation Objet : les Classes et les Objets

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Cours de Probabilités et de Statistique

Transcription:

NFP136- Cours 2 ALGORITHMES ET COMPLEXITÉ PLAN Définition d'un algorithme Un exemple Présentation des algorithmes Évaluation d'un algorithme Complexité 1

DÉFINITION D'UN ALGORITHME Procédure de calcul bien définie qui prend en entrée un ensemble de valeurs et produit en sortie un ensemble de valeurs. (Cormen, Leiserson, Rivert) Ensemble d'opérations de calcul élémentaires, organisé selon des règles précises dans le but de résoudre un problème donné. Pour chaque donnée du problème, il retourne une réponse après un nombre fini d'opérations. (Beauquier,Berstel,Chrétienne) 2

Phase 1 ENONCÉ DU PROBLÈME Spécification Phase 2 ÉLABORATION DE L'ALGORITHME Phase 3 VÉRIFICATION Phase 4 MESURE DE L'EFFICACITÉ Phase 5 MISE EN OEUVRE Complexité Programmation 3

UN EXEMPLE Le tri par sélection ordinaire Entrée: ÉNONCÉ DU PROBLÈME Un tableau d entiers Sortie: Le même tableau, trié par ordre croissant 4

L'ALGORITHME- Tri sélection Principe tant que il reste plus d'un élément non trié faire - chercher le plus petit parmi les non triés ; - échanger le premier élément non trié avec le plus petit trouvé; fait; 5

EXEMPLE (suite) éléments triés éléments non triés 7 8 15 5 10 5 8 15 7 10 5 7 15 8 10 5 7 8 15 10 5 7 8 10 15 5 7 8 10 15 6

Tri sélection- plus détaillé tri-selec (tableau A de n entiers) début pour i = 0 à n-2 faire // les éléments de 0 à i-1 sont déjà triés // i : place où on doit mettre le suivant plus petit // recherche de la place J du plus petit des non triés j = i; pour k = i+1 à n-1 faire si A[k] < A[j] alors j = k ; finsi ; fait; échanger (A[i], A[j]) ; fait; fin 7

Tri sélection- en Java public static void tri_selection (int[] A){ int temp, j; for (int i=0; i< A.length-1; i++ ){ j = i; for( int k=i; k<=a.length-1; k++ ){ if( A[k]<A[j] ) j = k; } //echange temp=a[j]; A[j]=A[i]; A[i]=temp; } } 8

Evaluation des algorithmes Complexité des algorithmes 9

ÉVALUATION D'UN ALGORITHME EFFICACITÉ TEMPS D'EXÉCUTION MÉMOIRE OCCUPÉE Non mesurable par des tests EXEMPLE n entier est-il premier? n = 1148? non, divisible par 2 n = 1147???? (31 * 37) 10

NOMBRE D'OPÉRATIONS EN FONCTION DU NOMBRE DES DONNÉES PIRE DES CAS EN MOYENNE 11

EXEMPLES VOYAGEUR DE COMMERCE (N VILLES) Données: distances entre chaque paire de villes Nombre de données = N 2 Enumération et évaluation des (N-1)! tournées possibles et sélection de la plus économique MIN DE N 2 NOMBRES qui représentent des distances entre N villes Même nombre de données: M=N 2 12

Temps de calcul si 10-9 secondes par comparaison N 10 20 30 40 50 Taille 100 400 900 1600 2500 (M=) N 2 Min de N 2 nombres 0,1 µs 0,4 µs 0,9 µs 1,6 µs 2,5 µs Min de (N-1)! nombres 363 µs >3 an 10 16 ans 10 30 ans 10 45 ans 13

OPERATIONS "ÉLÉMENTAIRES" On compte les macro-opérations + - * / tests (> ) et ou... TAILLE D'UN PROBLÈME = NOMBRE DE DONNÉES Codage raisonnable des données 14

EXEMPLE (ajout, sous condition, d éléments du tableau B à des éléments du tableau A ; on suppose que les 2 tableaux ont plus de m+n éléments) AjoutTab (.) début pour i = 0 à m-1 faire A(i) =B(i) ; 1 m pour j = i à n+i-1 faire n si A(i) < B(j) alors 1 fois fois A(i) =A(i)+B(j) ; 2 fin fait; fait; finsi ; 15

nombre d'opérations Pire des cas, test A(i)<B(j) toujours vrai m(1+ 3n)= 3nm+m opérations Meilleur cas, test A(i)<B(j) toujours faux m(1+ n)= nm+m opérations 16

EXEMPLE (suite) tri-selection début pour i = 0 à n-2 faire j = i ; 1 Pour chaque i, pour k = i+1 à n-1 faire si A[k] < A[j] alors 1 j = k ; 1 finsi ; fait; n-i-1 fois 1+2(n-i-1)+3 opérations échanger (A[i], A[j]) ; 3 fait; fin 17

nombre d'opérations (pire des cas) n 2!! + "! 4( n 1) 2 ( n! i! 1) = 4( n! 1) + 2" i = i= 0 i= 1 4 (n-1)+ n(n-1) = n 2 +3n - 4 n 1 Rappel : somme des n-1 premiers entiers = n(n-1)/2 18

Algorithme "efficace" = Algorithme polynomial EXEMPLE (suite): n 2 + 3n - 4 Problèmes "intraitables" Théorie de la complexité EXEMPLE: voyageur de commerce 19

COMPLEXITE DES ALGORITHMES D n = {données de taille n} coût A (d) = coût de l'algorithme A sur la donnée d PIRE DES CAS Max A (n) = Max coût A (d) d Dn - borne sup du coût - assez facile à calculer - souvent réaliste 20

COMPLEXITE EN MOYENNE p(d) = probabilité de la donnée d Moy A (n) =! d" Dn p ( d)* coûta( d) - connaître la distribution des données - souvent difficile à calculer - intéressant si comportement usuel de l'algorithme éloigné du pire des cas 21

EXEMPLE : produit de 2 matrices static float[][] produitmatrices } ( float[][] A,float[][] B ){ //A[m,n] et B[n,p] résultat C[m,p] float[][] C = newfloat[a.length][b[0].length]; for(int i=0;i< A.length;i++){ } for(int j=0;j< B[0].length;j++){ } return C; float s=0; for(int k=0;k< B.length;k++) C[i][j]=s; s=s+a[i][k]*b[k][j]; n fois p fois m fois pire cas = cas moyen=mp(2n+2) opérations 22

NOTATIONS DE LANDAU f, g fonctions N N Notation O f = O(g) lire : f est en O de g Il existe n 0 N et c constante t.q. f(n) c g(n) pour tout n n 0 23

EXEMPLE algo A : f(n) = 4n 3 +2n+1 opérations - O pour tout n 1: f(n) 7n 3 n 0 =1 c=7 g(n)=n 3 donc f(n) = O(n 3 ) 24

Notation O majorant du nombre d'opérations d'un algorithme c g ( n ) f ( n ) n 0 f = O(g(n)) 25

Complexité comportement des algorithmes quand le nombre de données augmente comparaison entre algorithmes Algorithme polynomial f(n) = a 0 n p + a 1 n p-1 +...+ a p-1 n + a p f = O(n p ) EXEMPLE (fin) f(n) = n 2 + 3n - 4 Le tri-selection est un algorithme polynomial en O(n 2 ) 26

Bonne complexité O(log n) ou O(n) ou O(n log n) n 3 n 2 nlogn Allure de quelques courbes n = 10 6 1 µs par opération n logn log 2 n n nlog 2 n n 2 n 3 20µs 1 s 20 s 12 j 32 Ka 27

De l effet des progrès de la technologie sur la résolution des problèmes nombre d' opération s taille max des problèmes traitables en 1 heure avec un ordinateur : actuel 100 fois plus rapide 1000 fois plus rapide (le plus rapide) N N1 100 N 1 1000 N 1 n 2 n 5 N2 (soit N 2 2 opérations) N3 (soit N 5 3 opérations) 2 n N4 (soit 2 N4 opérations) 3 n N5 (soit 3 N5 opérations) 10 N2 31,6 N 2 2,5 N 3 3,98 N 3 N4 + 6,64 N4 + 9,97 N5 + 4,19 N5 + 6,29 Même si la puissance des ordinateurs augmente, certains gros problèmes ne pourront sans doute jamais être résolus 28

Une illustration de l amélioration de complexité : recherche séquentielle et recherche dichotomiqe d un élément dans un tableau trié 29

Le problème Etant données : - Un tableau T de n entiers triés par ordre croissant - Un entier x Ecrire un algorithme qui teste si x appartient à T : recherche de x dans T 30

Recherche séquentielle Idée de l algorithme : - Parcourir le tableau T. S arrêter :. soit parce qu on trouve x. Soit parce qu on trouve un élément > x On a immédiatement une idée de la complexité au pire : Au pire on parcourt les n cases du tableau en faisant pour chaque case un nombre constant de comparaisons donc complexité O(n) 31

Recherche séquentielle- en java static boolean recherche_lin (int x, int [] T) { int i=0; boolean rep=false; for ( ; i < T.length && (rep==false); i++) { if (T[i]==x) {rep=true;} if (T[i]>x) { break;} } System.out.println("Nombre d'iterations "+(i+1)); return(rep); } 32

Recherche dichotomique Idée de l algorithme : - Si x est dans T alors il serait dans un intervalle d indices [d..f[ ; d initialisé à 0 et f après la fin de T - On compare x par rapport à T[m] où m est l indice du milieu du tableau - Si x = T[m] on s arrête car on a trouvé x - Si T[m] < x on en déduit que x ne peut pas se trouver dans l intervalle d..m ; on «bouge» d - Sinon (T[m] >x) on en déduit que x ne peut pas se trouver dans l intervalle m..f ; on «bouge» f - On s arrête soit parce qu on a trouvé x soit parce que l intervalle [d..f[ devient vide 33

Recherche dichotomique- en java static boolean recherche_dicho (int x, int [] T) { int d=0; int f = T.length; //si x est dans le tableau, il le serait dans [d..f[ (f exclu) int m; boolean trouve = false; int cptr=0; while ((trouve == false) && (d<f)){ cptr++; m = (d+f)/2; if (T[m]==x) trouve=true; else if (T[m] < x) d=m+1; else f=m; } System.out.println("Nombre d'iterations "+cptr); return(trouve); } 34

Complexité en O(log n) Soit k le nombre de passages dans la boucle while. on divise le nombre d'éléments restants par 2 jusqu'à ce qu'il n'en reste qu'un (k divisions) ((((n/2)/2)/2)/../2)=1 Donc n/2 k =1 et ainsi k=log 2 n 35

Comparaison expérimentale - On génère aléatoirement un tableau trié de n éléments (T[0] dans [0,10] et T[i] dans [T[i-1], T[i-1]+10]) - on recherche ensuite un même élément par la méthode séquentielle puis par la méthode dichotomique 36

Comparaison expérimentale G:\NFP136JAVA\javapourVari>java dicho Entrez le nombre d'elements -> 1000 On va maintenant faire des recherches Entrez un element a rechercher -> 236 ----Recherche lineaire Nombre d'iterations 50 236 apparait dans le tableau ----Recherche dichotomique Nombre d'iterations 10 236 apparait dans le tableau 37

Comparaison expérimentale G:\NFP136JAVA\javapourVari>java dicho Entrez le nombre d'elements -> 10000000 On va maintenant faire des recherches Entrez un element a rechercher -> 456987 ----Recherche lineaire Nombre d'iterations 101533 456987 n'apparait pas dans le tableau ----Recherche dichotomique Nombre d'iterations 24 456987 n'apparait pas dans le tableau log(10000000) 24 38

REMARQUES PRATIQUES comptage grossier des opérations (+ - / * tests ) mais attention aux boucles ce qui est à l'extérieur des boucles est souvent négligeable on écrit O(logn) au lieu de O(log 2 n) hiérarchie (n > 1) logn < n < nlogn < n2 < n3 << 39