07/09/2014. Question : L infini de quoi? Définition 1.1 L'efficacité. d'un algorithme est mesurée par son coût (complexité

Documents pareils
Université Bordeaux 1, Licence Semestre 3 - Algorithmes et struct...

INITIATION A L ALGORITHMIQUE INF 102

Rappels sur les suites - Algorithme

Programmation Objet - Cours II

CORRECTION EXERCICES ALGORITHME 1

4. Les structures de données statiques

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

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

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Propagation sur réseau statique et dynamique

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

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

Algorithmes récursifs

LE PROBLEME DU PLUS COURT CHEMIN

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

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

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

Programmation Orientée Objet

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

MIS 102 Initiation à l Informatique

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

L exclusion mutuelle distribuée

Application 1- VBA : Test de comportements d'investissements

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Cours Informatique Master STEP

Algorithmes de recherche

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

Introduction a l'algorithmique des objets partages. Robert Cori. Antoine Petit. Lifac, ENS Cachan, Cachan Cedex. Resume

BAREME sur 40 points. Informatique - session 2 - Master de psychologie 2006/2007

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

Reaper : utilisations avancées

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Introduction. I Étude rapide du réseau - Apprentissage. II Application à la reconnaissance des notes.

INITIATION AU LANGAGE JAVA

Chapitre 2. Classes et objets

Utilisation de l analyse statique comme outil d aide au développement. par. Yves Gauthier

Contexte et motivations Les techniques envisagées Evolution des processus Conclusion

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

Diagramme de classes

Chapitre 1 : Introduction aux bases de données

L apprentissage automatique

Bac Blanc Terminale ES - Février 2011 Épreuve de Mathématiques (durée 3 heures)

Stages ISOFT : UNE SOCIETE INNOVANTE. Contact : Mme Lapedra, stage@isoft.fr

Initiation à l algorithmique

WEA Un Gérant d'objets Persistants pour des environnements distribués

Objectifs du cours d aujourd hui. Informatique II : Cours d introduction à l informatique et à la programmation objet. Complexité d un problème (2)

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

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

I- Définitions des signaux.

Introduire un nouveau type de maille ou un nouvel élément de référence

Ebauche Rapport finale

Description des structures de donnees

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

Structures algébriques

Atelier Transversal AT11. Activité «Fourmis» Pierre Chauvet.

Systeme d'exploitation

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

TRIGONOMETRIE Algorithme : mesure principale

Information utiles. webpage : Google+ : digiusto/

Raisonnement par récurrence Suites numériques

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

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

F. Barthélemy. 17 mai 2005

GROUPE EXANE POLITIQUE D'EXÉCUTION

Peut-on tout programmer?

COUR SUPÉRIEURE SOUS LA PRÉSIDENCE DE : L HONORABLE YVES MAYRAND, J.C.S. MOTIFS ET JUGEMENT Art (2) L.F.I.

Logiciel SCRATCH FICHE 02

alg - Classes, instances, objets [oo] Exercices résolus

INEX. Informatique en Nuage : Expérimentations et Vérification. Livrable n M1 PARALLÉLISME ET ÉVALUATION

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Projet de Veille Technologique

Développement d'un projet informatique

Organigramme / Algorigramme Dossier élève 1 SI

Le rôle du syndic. Introduction

Vue d'ensemble OBJECTIFS

RÉSOLUTION DE SYSTÈMES À DEUX INCONNUES

Correction TD algorithmique

OASIS Date de publication

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

TRUECRYPT SUR CLEF USB ( Par Sébastien Maisse 09/12/2007 )

la virtualisation pour quoi faire?

Algorithmique avec Algobox

Algorithmique et structures de données I


Service pénal Fiche contrevenant

Projet Active Object

2 Grad Info Soir Langage C++ Juin Projet BANQUE

Adama MBODJI MBODJ.SYSTEM

1 Recherche en table par balayage

TPE/PME : comment me situer et justifier de mon statut?

FOIRE AUX QUESTIONS PAIEMENT PAR INTERNET. Nom de fichier : Monetico_Paiement_Foire_aux_Questions_v1.7 Numéro de version : 1.7 Date :

Traduction des Langages : Le Compilateur Micro Java

L'équilibre général des échanges

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Seconde et première Exercices de révision sur les probabilités Corrigé

Transcription:

Déition 1.1 L'efficacité d'un algorithme est mesurée par son coût (complexité complexité) en temps et en mémoire. La complexité d'un algorithme se mesure en calculant : le nombre d'opérations élémentaires, la taille de la mémoire nécessaire, pour traiter une donnée de taille n. Carole Blanc Année 2014-2015 Complexité Récursivité Type abstrait Containeur Implémentation On considèrera dans ce cours que la complexité des instructions élémentaires les plus courantes sur un ordinateur a un temps d'exécution constant égal à 1. Centre d intérêt pour l'algorithmique c'est l'ordre de grandeur au voisinage de l'ini de la fonction qui exprime le nombre d'instructions ou la taille de la mémoire. Question : L ini de quoi? 1

Déition 1.2 On déit les trois complexités suivantes : Complexité dans le pire des cas : C > A(n)=max{C A (d),d donnée de taille n} Complexité dans le meilleur des cas : C < A(n)=min{C A (d),d donnée de taille n} Complexité en moyenne : C ( n) = Pr ( d) C ( d) A d instance de A où Pr(d) est la probabilité d'avoir en entrée une instance d parmi toutes les données de taille n. A Déition 1.3: Lorsqu'un algorithme contient un appel à lui-même même, on dit qu'il est récursif. Lorsque deux algorithmes s'appellent l'un l'autre on dit que la récursivité est croisée Complexité Un algorithme récursif nécessite de conserver les contextes récursifs des appels. La récursivité peut donc conduire à une complexité mémoire plus grande qu'un algorithme itératif. Cas Particulier : Problème NP-complet C est un problème pour lequel on ne connait pas d'algorithme correct efficace : réalisable en temps et en mémoire. L'ensemble des problèmes NP-complets ont les propriétés suivantes : Si on trouve un algorithme efficace pour un problème NP complet alors il existe des algorithmes efficaces pour tous, Personne n'a jamais trouvé un algorithme efficace pour un problème NP-complet, Personne n'a jamais prouvé qu'il ne peut pas exister d'algorithme efficace pour un problème NP-complet particulier. Le plus célèbre est le problème du voyageur de commerce. : calcul de la fonction factorielle : fonction facrecur(val :entier):entier; si n==0 alors retourner(1) retourner(n*facrec(n-1)) si fonction 2

: calcul de la fonction factorielle fonction faciter(val n:entier):entier; var i,p:entier; p=1: pour i=2 à n faire p=p*i; pour retourner(p) Finfonction La fonction factiter est meilleure en temps et mémoire (voir). L'algorithme facrecur ne présente pas de récursivité terminale. fonction facrecur(val n:entier):entier; si n==0 alors retourner(1) retourner(n*facrec(n-1)) si fonction Déition 1.4 : Un algorithme récursif présente une récursivité terminale si et seulement si la valeur retournée par cet algorithme est une valeur fixe, ou une valeur calculée par cet algorithme. L'algorithme facrecur ne présente pas de récursivité terminale. fonction facrecurterm(val n:entier; val res:entier):entier; si n==0 alors retourner(res) retourner(facrecurterm(n-1,n*res)) si fonction L'algorithme facrecurterm présente une récursivité terminale. La factorielle se calcule par l'appel facrecurterm(n,1) 3

Intérêt : les compilateurs détectent cette propriété et optimisent le stockage de l'environnement de la fonction. Ainsi facrecurterm aura une complexité identique à faciter. ATTENTION. Dans le cas d'un algorithme présentant deux appels récursifs, rendre la récursivité terminale ne permet pas obligatoirement au compilateur d'obtenir une complexité inférieure. Les nombres complexes ne sont pas des types de bases. On peut les déir comme un type abstrait : nom : nombrecomplexe ensemble de valeur : primitives : multiplication : (nombrecomplexe nombrecomplexe) nombrecomplexe addition : (nombrecomplexe nombrecomplexe) nombrecomplexe module : nombrecomplexe Déition 1.5 : Un type abstrait est un triplet composé : d'un nom, d'un ensemble de valeurs, d'un ensemble d'opérations (souvent appelé primitives) déies sur ces valeurs. D'un point de vue complexité, on considère que les primitives (à part celle d'initialisation si elle existe) ont une complexité en temps et en mémoire en O(1). Pour désigner un type abstrait on utilise une chaine de caractères. Déition 1.6 : Un containeur est un type abstrait permettant de représenter des collections d'objets ainsi que les opérations sur ces objets. Les collections que l'on veut représenter peuvent être ordonnées ou non, numériques ou non. L'ordre est parfois fourni par un évènement extérieur. Les collections d'objets peuvent parfois contenir des éléments identiques. 4

Primitives : Accès valeur : containeur objet creercontaineur: containeur vide ajouter : containeur X objet vide supprimer : containeur X objet vide detruirecontaineur : containeur vide Un ensemble de nombres complexes peut être déi par un containeur dont les objets sont des nombrecomplexe. Le type abstrait nombrecomplexe peut être implémenté de la manière suivante : nombrecomplexe=structure r:; Nom i:; r Finstructure var c : nombrecomplexe; Nom variable c c.r c.i Type nombre Complexe i nombrecomplexe Type Déition 1.7 : L'implémentation consiste à choisir une structure de données et les algorithmes associés pour réaliser un type abstrait La structure de données utilisée pour l'implémentation peut elle-même être un type abstrait. L'implémentation doit respecter la complexité des primitives à part celle d'initialisation (celle-ci ne s'exécutera qu'une fois). Le type abstrait nombrecomplexe peut être implémenté de la manière suivante : nombrecomplexe=structure r:; i:; Finstructure fonction op::*(val a,b:nombrecomplexe):nombrecomplexe; var c:nombrecomplexe; c.r=a.r*b.r-a.i*b.i; c.i=a.r*b.i+a.i*b.r; retourner(c) 5

fonction op::+(val a,b:nombrecomplexe):nombrecomplexe; var c:nombrecomplexe; c.r=a.r+b.r; c.i=a.i+b.i; retourner(c) fonction module(val a:nombrecomplexe):; retourner(sqrt(a.r*a.r+a.i*a.i)) fonction creercontaineur(ref C:containeur de nombrecomplexe):vide; pour i allant de 1 à N faire C[i].b=faux; Pour; C v 1 2 3 4 5 N b F F F F F F F F F booléen nombrecomplexe Un containeur de nombrecomplexe peut être implémenté par un tableau de nombrecomplexe. containeur d'objet=tableau[1..n]de structure v:objet; b:booleen; Finstructure v b T 1 2 3 4 5 6 N objet booléen fonction ajouter(ref C: containeur de nombrecomplexe;val x:nombrecomplexe):vide i=1; tant que i<n et C[i].b faire i=i+1; tantque si i<=n alors C[i].v=x; C si C[i].b=vrai 1 2 3 4 5 N v c1 c21 c5 c2 nombrecomplexe b V V V V F F F F F booléen 6

fonction supprimer(ref C: containeur de nombrecomplexe;val x:nombrecomplexe):vide i=1; tant que i<=n et C[i].v!=x faire i=i+1; tantque C si i<=n alors 1 2 3 4 5 N C[i].b=faux v c1 c21 c5 c2 nombrecomplexe si b V V F V F F F F booléen Accès fonction valeur(ref C : containeur de nombrecomplexe):nombrecomplexe; /* retourne le 1er nombre complexe présent/* i=1; tant que i<=n et!c[i].b faire i=i+1; tantque si i<=n alors retourner(c[i].v) retourner(null) si 2 conditions d arrêt Test en sortie de boucle fonction detruirecontaineur(ref C : containeur de nombrecomplexe):vide pour i allant de 1 à N faire C[i].b=faux; Pour; 7