Calculabilité, correction, terminaison et compléxité 1/23

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

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Peut-on tout programmer?

Chapitre 7. Récurrences

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

Cours Informatique Master STEP

STAGE IREM 0- Premiers pas en Python

Initiation à l algorithmique

Initiation à la programmation en Python

Ordonnancement. N: nains de jardin. X: peinture extérieure. E: électricité T: toit. M: murs. F: fondations CHAPTER 1

Algorithmes de recherche

Calculateur quantique: factorisation des entiers

Programmation linéaire

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

Corrigé des TD 1 à 5

Cours 1 : La compilation

1 Recherche en table par balayage

Les arbres binaires de recherche

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

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

Algorithmique I. Algorithmique I p.1/??

4. Les structures de données statiques

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)

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


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

MIS 102 Initiation à l Informatique

Examen Médian - 1 heure 30

Chp. 4. Minimisation d une fonction d une variable

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

Raisonnement par récurrence Suites numériques

CORRECTION EXERCICES ALGORITHME 1

1. Structure d'un programme FORTRAN 95

Limites finies en un point

Résolution de systèmes linéaires par des méthodes directes

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

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

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

Rappels sur les suites - Algorithme

Représentation d un entier en base b

Vers l'ordinateur quantique

Logiciel Libre Cours 3 Fondements: Génie Logiciel

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

Optimisation Discrète

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Chapitre 4 Pierre, papier, ciseaux

Quelques Algorithmes simples

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Algorithmes récursifs

1.6- Génération de nombres aléatoires

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

Définition : On obtient les nombres entiers en ajoutant ou retranchant des unités à zéro.

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

Découverte de Python

FctsAffines.nb 1. Mathématiques, 1-ère année Edition Fonctions affines

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

CHAPITRE VIII : Les circuits avec résistances ohmiques

Comparaison de fonctions Développements limités. Chapitre 10

Résolution d équations non linéaires

Chapitre 6. Fonction réelle d une variable réelle

LE PROBLEME DU PLUS COURT CHEMIN

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

I. Introduction aux fonctions : les fonctions standards

Quelques tests de primalité

Pourquoi l apprentissage?

Propagation sur réseau statique et dynamique

Programmation Linéaire - Cours 1

Cours de Master Recherche

Plan. 5 Actualisation. 7 Investissement. 2 Calcul du taux d intérêt 3 Taux équivalent 4 Placement à versements fixes.

FONCTION EXPONENTIELLE ( ) 2 = 0.

Sur certaines séries entières particulières

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

La persistance des nombres

Java Licence Professionnelle CISII,

Quelques algorithmes simples dont l analyse n est pas si simple

Le développement d'applications informatiques

Par combien de zéros se termine N!?

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Simulation de variables aléatoires

Cours 02 : Problème général de la programmation linéaire

Algorithmique avec Algobox

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

Table des matières. I Mise à niveau 11. Préface

t 100. = 8 ; le pourcentage de réduction est : 8 % 1 t Le pourcentage d'évolution (appelé aussi taux d'évolution) est le nombre :

Cours de Systèmes d Exploitation

Commun à tous les candidats

Cours 7 : Utilisation de modules sous python

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

Licence Sciences et Technologies Examen janvier 2010

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Algorithmique et Programmation

Les chaînes de caractères

Chapitre 3. Quelques fonctions usuelles. 1 Fonctions logarithme et exponentielle. 1.1 La fonction logarithme

Calcul de développements de Puiseux et application au calcul du groupe de monodromie d'une courbe algébrique plane

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Conventions d écriture et outils de mise au point

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

Transcription:

Calculabilité, correction, terminaison et compléxité 1/23

Sommaire 1. 2. 3. 4. 5. Calculabilité Terminaison et correction d'algorithmes Complexité Exemple : tri Pour aller plus loin 2/23

Calculabilité fonction calculable : une fonction f est calculable s'il existe une méthode précise qui, étant donné un argument x, permet d'obtenir l'image f (x) en un nombre fini d'étapes. Plusieurs formalisations mathématiques de ce que peut être une méthode de calcul existent et sont équivalentes : fonctions récursives machine de Turing lambda-calcul machine à compteurs automate cellulaire Elles définissent exactement les mêmes fonctions calculables. 3/23

Qu'est ce qui est programmable? Considérons les fonctions du type : f : N N La plupart des fonctions que nous connaissons sont programmables : f (x) = x 2 f (x) = x 2 + 1 f (x) = cos(x) premier(x) = { 1 0 si x est premier sinon 4/23

Nombre de programmes??? Un exemple : la fonction constante égale à 0. function f(n){return n n + x x; } Si on remplace x par n'importe quel entier on peut en écrire une infinité. On peut donc les numéroter (en partant du plus court et dans l'ordre lexicographique) Il y a donc autant de programmes qu'il y a de nombres entiers. En désignant par l'ensembles des programmes de N N on obtient : card( ) = card(n) = ℵ 0 ℵ 0 représente l'infini dénombrable 5/23

Nombre de fonctions calculables Il ne peut pas y avoir plus de fonctions calculables qu'il n'y a de programmes. On en déduit : card( c ) = card(n) = ℵ 0 6/23

Nombre de fonctions de N N Une infinité : mais est-ce la même infinité que les fonctions calculables? A chaque partie A de N, on peut associer sas fonction indicatrice : f A : N n N { O 1 si si n A n A On définit ainsi une fonction ϕ de l'ensemble (N) des parties de N dans l'ensemble 0,1 ϕ : (N) A 0,1 f A ϕ est une fonction bijective, on en déduit : card( (N)) = card( 0,1 ) Un théorème de Cantor établit que pour un ensemble E : card( (E)) > card(e) 7/23

Nombre de fonctions de N N On en déduit que : comme on en déduit que : 0,1 card( 0,1 Conclusion : les fonctions non calculables sont infiniment plus nombreuses que les fonctions calculables Questions : pouvez vous en citer une??? ) > (N) card( ) > card(n) 8/23

Problème de l'arrêt ou terminaison des programmes Un problème typique : Y a t'il un bug ou est ce le déroulement normal de l'algorithme Un exemple : le calcul de la factorielle d'un nombre function factorielle(n) { // spécifications : n > 0 res=1; while (n > 1) { res*=n; n--; } return res; } La terminaison de ce programme n'est pas difficile à montrer 9/23

Problème de l'arrêt ou terminaison des programmes Un autre exemple : function collatz(n) { // spécification : n > 0 if (n==1) return 1; if (n%2==0) n/=2; else n=3*n+1; } Là c'est moins évident et pour cause 10/23

Un résultat paradoxal Supposons que l'on puisse écrire un programme prennant en paramètre une fonction et qui retourne vrai si cette fonction s'arrête quelque soit la (ou les) donnée(s) d'entrée(s). Si un tel programme existe et qu'il est correct alors on peut l'utiliser sur la fonction collatz et à nous la fortune. Que dire de cette fonction : function une_fonction() { if (arret_garanti(une_fonction())) une_fonction(); } Le calcul de une_fonction() s'arrête si et seulement si il ne s'arrête pas 11/23

Comment savoir qu'un algorithme est correct? Problèmes rencontrés en algorithmique : Algorithme itératif contenant une boucle infinie : problème de terminaison Algorithme récursif ne contenant pas la base : problème de terminaison. Algorithme se terminant mais ne donnant pas toujours la solution correcte : problème de correction (validité). Algorithme faisant des erreurs numériques : problème issu de l arithmétique de la machine. 12/23

Comment savoir qu'un algorithme est correct? Méthodes logiques pour la vérification des algorithmes : Tests : on essaie l algorithme sur plusieurs données pour observer et corriger les anomalies de l algorithme Preuves : on prouve mathématiquement que l algorithme est valide Inconvénients : Les tests ne permettent pas toujours de trouver les bugs obscurs. L utilisation unique des tests est parfois très dangereuse. Les preuves mathématiques peuvent parfois être fausses, et donc produisent des algorithmes faux ou contenant des erreurs. La solution : utiliser parallèlement des preuves mathématiques et des tests 13/23

Terminaison et correction d'un algorithme Définition : un algorithme se termine, si son exécution sur machine s arrête toujours quelque soit la nature des données en entrée Définition: un algorithme est correct (ou valide), s il se termine, et si le résultat qu il fournit est toujours correct, c est-à-dire l algorithme fait bien ce qu il est supposé faire dans sa spécification. 14/23

Preuve d un algorithme récursif Preuve de terminaison : montrer que l algorithme parvient toujours au traitement de la base en un nombre fini d appels. Méthode : La preuve s effectue par induction (récurrence) sur la taille du problème à résoudre La base de la récurrence est celle de la récursivité L étape de la récurrence : on suppose que l algorithme se termine pour les appels récursifs précédents, et on montre qu il se termine pour l'appel courant Preuve de correction : montrer que l algorithme calcul bien le résultat après la terminaison de tous les appels récursifs Méthode : idem terminaison 15/23

Preuve d un algorithme itératif Méthode : Analyser les boucles de l'algorithme, une par une en commençant par la boucle la plus interne en cas de boucles imbriquées Concevoir pour chaque boucle, un invariant de boucle Prouver que les invariants de boucle sont valides (par récurrence) Utiliser les invariants de boucle pour prouver que l'algorithme se termine Utiliser les invariants de boucle pour prouver que l'algorithme calcule le résultat correct Définition : un invariant de boucle est une propriété qui lie les variables d une boucle et qui est toujours vraie après chaque passage dans la boucle 16/23

Compléxité des algorithmes Comment évaluer les performances d'un algorithme? Différents algorithmes ont des coûts différents en terme de temps d'exécution(nombre d'opérations)et de taille mémoire. Ces deux concepts sont appelés complexité en temps et en espace de l'algorithme La complexité algorithmique permet de mesurer les performances d'un algorithme et de le comparer avec d'autres algortihmes réalisant les mêmes fonctionnalités. La complexité algorithmique est un concept fondamental pour tout informaticien, elle permet de déterminer si un algorithme a et meilleur qu'un algortihme b et s'il est optimal ou s'il ne doit pas être utilisé... 17/23

Temps d'exécution Le temps d'exécution d'un programme dépend : 1. 2. 3. 4. du nombre de données, de la taille du code, du type d'ordinateur utilisé (processeur,mémoire), de la complexité en temps de l'algorithme «abstrait» sous-jacent. Soit n la taille des données du problème et T(n) le temps d'exécution de l'algorithme. On distingue : Le temps du plus mauvais cas T max (n) qui correspond au temps maximum pris par l'algorithme pour un problème de taille n. le temps moyen T moy (n) d'exécution sur des données de taille n ( suppositions sur la distribution des données). 18/23

Temps d'exécution Règles générales : 1. le temps d'exécution ( constant c, ) d'une affectation ou d'un test est considéré comme 2. le temps d'une séquence d'instructions est la somme des la composent, des instructions qui 3. le temps d'un branchement conditionnel est égal au t. e. du test plus le max des deux t. e. correspondant aux deux alternatives 4. t. e. le temps d'une boucle est égal à la somme du coût du test + du corps de la boucle multiplié par le nombre d'itérations. t. e. 19/23

Quelques exemples de complexité Notation de Landau : f (n) O(g(n)), f est bornée, par le dessus, par g asymptotiquement (à un facteur près). Lorsque n on a f (n) g(n). k pour k > 0. Exemples : O(1) O(log(n)) : bornée par une constante O((log(n))c) O(n) : logarithmique : linéaire O(n. log(n)) O( n 2 ) O( n c ) O( c n ) O(n!) : polylogarithmique : parfois appelée «linéarithmique», ou «quasi-linéaire» : quadratique : polynomiale : exponentielle, parfois «géométrique» : factorielle 20/23

Exemple : algorithmes de tris O( n 2 ) : tri à bulles, tri par sélection, tri par insertion tri fusion : O(n. log(n)) (structures de données supplémentaires) tri rapide (quicksort) : O(n. log(n)) en moyenne mais O( n 2 ) dans le pire des cas tri par tas (heapsort) : O(n. log(n)) 21/23

22/23

Questions??? 23/23