Avant de commencer : attention semaine prochaine

Documents pareils
Algorithmique I. Algorithmique I p.1/??

1 Recherche en table par balayage

Chapitre 7. Récurrences

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

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

Initiation à l algorithmique

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Représentation d un entier en base b

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

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

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

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)

Programmation linéaire

Algorithmes récursifs

STAGE IREM 0- Premiers pas en Python

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Corrigé des TD 1 à 5

Objets Combinatoires élementaires

Licence Sciences et Technologies Examen janvier 2010

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

Nouvelles propositions pour la résolution exacte du sac à dos multi-objectif unidimensionnel en variables binaires

Recherche dans un tableau

Cours d algorithmique pour la classe de 2nde

Rappels sur les suites - Algorithme

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP


Quelques tests de primalité

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

Les arbres binaires de recherche

Représentation des Nombres

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

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

Probabilités sur un univers fini

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Introduction à MATLAB R

Chapitre 11. Séries de Fourier. Nous supposons connues les formules donnant les coefficients de Fourier d une fonction 2 - périodique :

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

Probabilités conditionnelles Loi binomiale

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

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

Initiation à la programmation en Python

# 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>

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

Quelques Algorithmes simples

Conversion d un entier. Méthode par soustraction

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

Polynômes à plusieurs variables. Résultant

V- Manipulations de nombres en binaire

données en connaissance et en actions?

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

ASR1 TD7 : Un microprocesseur RISC 16 bits

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

Cryptographie et fonctions à sens unique

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

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

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

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

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Cours de Probabilités et de Statistique

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

Statistiques Descriptives à une dimension

DOCM Solutions officielles = n 2 10.

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Cours d initiation à la programmation en C++ Johann Cuenin

Exprimer ce coefficient de proportionnalité sous forme de pourcentage : 3,5 %

Algorithmique et Programmation, IMA

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

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Les structures de données. Rajae El Ouazzani

Calculabilité Cours 3 : Problèmes non-calculables.

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

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

Cours 7 : Utilisation de modules sous python

OLYMPIADES ACADEMIQUES DE MATHEMATIQUES. 15 mars 2006 CLASSE DE PREMIERE ES, GMF

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Fonctions homographiques

ARBRES BINAIRES DE RECHERCHE

Introduction à l étude des Corps Finis

Théorie et Codage de l Information (IF01) exercices Paul Honeine Université de technologie de Troyes France

FORMULAIRE DE STATISTIQUES

Cours 1 : Qu est-ce que la programmation?

Groupe symétrique. Chapitre II. 1 Définitions et généralités

Cours de Systèmes d Exploitation

Enseignement secondaire technique

Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN

Java Licence Professionnelle CISII,

TP : Gestion d une image au format PGM

Créer le schéma relationnel d une base de données ACCESS

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

Cours Informatique 1. Monsieur SADOUNI Salheddine

Probabilités sur un univers fini

Probabilités Loi binomiale Exercices corrigés

Machines virtuelles Cours 1 : Introduction

Chapitre 3. Mesures stationnaires. et théorèmes de convergence

CHAPITRE V SYSTEMES DIFFERENTIELS LINEAIRES A COEFFICIENTS CONSTANTS DU PREMIER ORDRE. EQUATIONS DIFFERENTIELLES.

Excel Avancé. Plan. Outils de résolution. Interactivité dans les feuilles. Outils de simulation. La valeur cible Le solveur

Bien lire l énoncé 2 fois avant de continuer - Méthodes et/ou Explications Réponses. Antécédents d un nombre par une fonction

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

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

Transcription:

Avant de commencer : attention semaine prochaine Échange de cours La semaine prochaine seulement : Le cours d algo aura lieu mardi 13 de 13h30 à 15h Le cours de BDBC aura lieu jeudi 15 de 9h45 à 11h15 Les amphis restent ceux prévus sur chaque horaire 1 / 32

Algorithmique et Analyse d Algorithmes L3 Info Cours 2 : algorithmes récursifs, analyse en moyenne Benjamin Wack 2016-2017 2 / 32

La dernière fois Qu est-ce qu un algorithme Notion de coût Notions de complexité (au pire) et ordres de grandeur Aujourd hui Comment écrire un algorithme récursif? Comment évaluer son coût? Comment évaluer l efficacité d un algorithme plus finement que dans le pire cas? Tri rapide 3 / 32

Plan Algorithme récursif Schémas récursifs Analyse de coût Analyse en moyenne Contexte Méthode Tri rapide 4 / 32

Algorithme récursif Schémas récursifs Notion d algorithme récursif Aux constructions habituelles on ajoute la possibilité d appeler l algorithme lui-même sur une autre donnée. Calcul de la factorielle FACT(n) Données : un entier n Résultat : la valeur de n! = n (n 1)... 2 1 if n = 0 return 1 return n FACT(n 1) caractéristique de l algorithme, pas du problème non limité aux entiers, et particulièrement adapté aux structures récursives ce n est pas de la triche! Travail fourni = identifier la structure récursive du problème 6 / 32

Algorithme récursif Schémas récursifs Structure Prérequis Savoir directement résoudre le problème sur des cas de base Savoir utiliser une (ou des) instances plus petites pour résoudre le problème «plus petit» = entier inférieur, sous-arbre, liste plus courte... mais pas seulement PAIR(n) Données : un entier n Résultat : booléen «n est-il pair?» if n = 0 return Vrai else return PAIR(n 2) Tout chemin d exécution doit mener à un cas de base en temps fini. 7 / 32

Algorithme récursif Schémas récursifs Écriture d un algorithme récursif Un problème qui casse pas des briques On cherche à construire un mur de longueur n avec des briques de longueur 2 ou 3. Exemples pour n = 14 Combien y a-t-il de possibilités distinctes? 2+2+3+2+3+2 3+2+2+2+2+3 3+3+3+2+3 8 / 32

Algorithme récursif Schémas récursifs Analyse du problème Données : la longueur n du mur (les tailles des briques sont fixées) (la récursivité ne peut donc porter que sur n) Utilisation de sous-problèmes : Une fois la première brique posée il reste un mur de longueur < n. Reconstruction de la solution : Les arrangements de longueur n = ceux commençant par une brique de longueur 2 + ceux commençant par une brique de longueur 3 Cas de base : n = 1 impossible ; pour n = 2 ou 3 un seul choix. BRIQUES(n) if n = 1 return 0 else if n = 2 ou n = 3 return 1 else return BRIQUES(n 2) + BRIQUES(n 3) 9 / 32

Algorithme récursif Schémas récursifs Exemple : Conversion en base 2 Spécification Étant donné un entier n, on cherche à produire à l écran l écriture binaire de n. Idée On sait que : n % 2 donne le dernier bit les bits les plus à gauche sont aussi ceux de n/2. Remarque Le problème ne se résout pas naturellement de manière impérative : il faut «commencer par la fin». 10 / 32

Algorithme récursif Schémas récursifs Exemple : Conversion en base 2 (suite) Structure récursive Les cas n = 0 et n = 1 sont connus. On sait résoudre le problème si on a résolu l instance n/2. Écriture binaire d un entier ECRITURE_BINAIRE(n) if n < 2 Écrire n else ECRITURE_BINAIRE(n/2) Écrire n % 2 Un algorithme récursif ne se termine en général pas par l appel récursif. Et si on voulait stocker le résultat dans un tableau? 11 / 32

Algorithme récursif Analyse de coût Retour sur la factorielle Rappel Le coût de l appel d une procédure est : le coût du corps de la procédure pour ses paramètres d appel plus le coût de l évaluation de ses paramètres. Calcul de la factorielle FACT(n) if n = 0 return 1 return n FACT (n 1) { CFACT (0) = 0 D où C FACT (n) = 2 + C FACT (n 1) La fonction de coût d un algorithme récursif obéit généralement elle-même à une équation récursive. 13 / 32

Algorithme récursif Analyse de coût Quelques équations récursives classiques Coût arithmétique Si C(n) = a + C(n 1) alors C(n) = a n + C(0) = O(n) Équations linéaires simples Si C(n) = C(n 1) + f (n) alors C(n) = C(0) + f (0) + f (1) + + f (n) = C(0) + n i=0 f (i) Comme C(0) est constant on peut généralement l ignorer. En particulier n i=1 1 = n = O(n) ; n i=1 i = n(n+1) 2 = O(n 2 ) et de manière plus générale n i=1 i k = O(n k+1 ). 14 / 32

Algorithme récursif Analyse de coût Quelques équations récursives classiques (2) Coût géométrique Si C(n) = a C(n 1) (avec a > 1) alors C(n) = a n C(0) = O(a n ) Équations linéaires multiples Plus généralement si on a C(n) = a 1 C(n 1) + a 2 C(n 2) +... a k C(n k) alors sauf cas pathologique on obtient une solution de la forme C(n) = O(n k 1 λ n ). autrement dit une croissance au moins exponentielle. 15 / 32

Algorithme récursif Analyse de coût Cas particuliers Calcul de coût direct Il est parfois possible de donner directement le coût. Ex : l algorithme d écriture binaire effectue clairement log 2 (n) divisions. Chaque appel compte A(n) if n = 0 return 1 else return A(n-1) + A(n-1) + 1 B(n) if n = 0 return 1 else return 2 B(n-1) + 1 mathématiquement équivalents algorithmiquement très différents 16 / 32

Algorithme récursif Analyse de coût Cas particuliers (2) PGCD SOUSTRACTIONS (a, b) Données : Deux entiers a et b non nuls Résultat : Le plus grand diviseur commun à a et b if a = b return a else if a > b return SOUSTRACTIONS (a b, b) else return SOUSTRACTIONS (b, a) «Décroissance» des données en un sens à préciser 17 / 32

Analyse en moyenne Contexte Motivation Recherche séquentielle en table RECH_SEQ(e, T, n) Données : l élément e à rechercher, un tableau T de taille n Résultat : le premier indice i tel que T [i] = e, ou 1 s il est absent i = 0 while i < n et puis T [i] e i = i + 1 if i < n return i else return 1 Complexité au pire Pire cas facile à exhiber : e absent de T ou en dernière position d où C RECH_SEQ (n) = O(n) 19 / 32

Analyse en moyenne Contexte Plus finement Pour tous les autres cas on fait strictement moins de n comparaisons! Ce genre d algorithme est utilisé de façon répétée : le coût d une exécution «au pire» n est pas très informatif. Idée : moyenne de coût de plusieurs exécutions On «lisse» les écarts de coûts en prenant en compte les différentes instances possibles : C moy A (n) = moyenne(coût(d)) pour toutes les données d de taille n Mais une moyenne uniforme est-elle représentative? 20 / 32

Analyse en moyenne Méthode Calcul de coût moyen Présupposé indispensable Modèle probabiliste de répartition des données i.e. pour une taille n fixée, probabilité pour chacune des données d possibles qu elle soit donnée en entrée à l algorithme Il doit correspondre à une réalité d utilisation : recherche dans un dictionnaire : la plupart du temps le mot existe accès mémoire : l élément recherché est souvent au début (cache) les algorithmes de tri reçoivent souvent des données presque triées... Formule générale : moyenne pondérée C moy A (n) = d de taille n P(d) coût(d) 22 / 32

Analyse en moyenne Méthode Fin de l exemple : recherche en table Deux paramètres sont nécessaires : probabilité P(e T ) notée p dans le cas où e T, on supposera équiprobable de le trouver à chacun des indices 0..n 1. On trouve alors : C moy RECH_SEQ (n) = (1 p) n + p n = (1 p)n + p n n(n+1) 2 = (1 p)n + p n+1 2 En particulier si p = 1 on a C moy n+1 RECH_SEQ (n) = 2 i=1 1 n i 23 / 32

Analyse en moyenne Méthode En pratique L analyse au pire et au mieux donne déjà des informations sur la complexité moyenne : C min A (n) C moy A max (n) C (n) A Regrouper les données de même coût :... C moy A (n) = c P({d de coût c}) c Parfois un modèle simplifié s impose pour que les calculs soient faisables : minimiser les paramètres privilégier l équiprobabilité (P(d) = 1 ) nombrededonnéesdistinctes 24 / 32

Tri rapide Le tri rapide aussi appelé QuickSort, Tri par segmentation... inventé par Tony Hoare en 1961 utilisé dans de nombreuses librairies comme tri «de référence» Quelques caractéristiques fondamentalement récursif en place (pas besoin de tableau auxiliaire) non stable (les éléments «égaux» ne conservent pas leur ordre initial) 26 / 32

Tri rapide Principe général D A E C B F 1. Choisir un élément : le pivot D A E C B F 2. Partitionner le tableau selon ce pivot : éléments inférieurs au pivot à gauche éléments supérieurs au pivot à droite A C B D F E 3. Trier récursivement les deux sous-tableaux ainsi formés A B C D E F 27 / 32

Tri rapide Schéma de l algorithme TriSegmentation (E) Donnée-résultat Un ensemble E de n éléments comparables Effet de bord E est trié par ordre croissant if E pivot := Extrait (E) // retire l élément pivot de E (E 1, E 2) := Segmentation (E,pivot) // E 1 éléments plus petits que pivot // E 2 éléments plus grands que pivot Assemble ( TriSegmentation (E 1), pivot, TriSegmentation (E 2)) À instancier avec les contraintes suivantes : E est représenté dans un tableau Segmentation en place Après l appel à Extrait on ne touche plus au pivot 28 / 32

Tri rapide Conception récursive Les appels récursifs opéreront sur des sous-tableaux 2 paramètres en plus : les indices entre lesquels on travaille Reconstruction triviale : E 1 et E 2 sont triés et leurs éléments sont bien placés par rapport au pivot Cas de base : tableau de taille 0 ou 1 (déjà trié) TriSegmentation (T, g, d) Donnée-résultat Un tableau T d éléments comparables Effet de bord T est trié par ordre croissant entre les indices g et d if g < d pivot := T [g] i := Partition (T, g, d, pivot) TriSegmentation (T, g,?i 1) TriSegmentation (T,?i + 1, d) 29 / 32

Tri rapide La procédure Partition Partition (T, g, d) Donnée-résultat Un tableau T d éléments comparables Résultat : L indice i de pivot correctement placé dans le tableau Effet de bord Les éléments de T entre les indices : g et i 1 sont tous inférieurs à pivot. i + 1 et d sont tous supérieurs à pivot. i = g while i < d if T [i + 1] pivot i = i + 1 else Échanger T [d] et T [i + 1] d = d 1 Échanger T [g] et T [i] return i 30 / 32

Tri rapide Éléments de complexité Partition peut s écrire de diverses façons, toutes linéaires en d g. Évaluation des paramètres négligeable D où C TriSegmentation (d g) = C Partition (d g) +C TriSegmentation (i 1 g) +C TriSegmentation (d i 1) = O(d g) +C TriSegmentation (i 1 g) +C TriSegmentation (d i 1)... mais i est donné par Partition, donc dépend de la donnée. Intuitivement : l algorithme est efficace (resp. inefficace) quand le pivot est un élément médian (resp. extrême). La suite en TD... 31 / 32

Tri rapide En résumé Aujourd hui Un algorithme récursif profite de la présence de sous-problèmes pour résoudre un problème La complexité en moyenne permet d évaluer le comportement d un algorithme dans une situation réaliste décrite par une distribution aléatoire L algorithme de tri rapide est récursif, peu performant au pire mais efficace en général La prochaine fois Invariant Correction d un algorithme Terminaison d un algorithme Drapeau hollandais 32 / 32

Bonus Fonction 91 de McCarthy MC91 (n) if n 100 return MC91(MC91(n + 11)) else return n 10 1 / 1