Informatique II (J1CP3020) Philippe Duchon. U. Bordeaux

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

Chapitre 7. Récurrences

Resolution limit in community detection

Algorithmique I. Algorithmique I p.1/??

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)

1 Recherche en table par balayage

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

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

Optimisation for Cloud Computing and Big Data

Programmation Par Contraintes

Exercices du Cours de la programmation linéaire donné par le Dr. Ali DERBALA

Algorithmique et Programmation, IMA

MIS 102 Initiation à l Informatique

Optimisation Discrète

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

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

Licence Sciences et Technologies Examen janvier 2010

Sujet 4: Programmation stochastique propriétés de fonction de recours

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Etude comparative de différents motifs utilisés pour le lancé de rayon

Logiciel Libre Cours 3 Fondements: Génie Logiciel

4D v11 SQL Release 5 (11.5) ADDENDUM

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

STAGE IREM 0- Premiers pas en Python

Programmation avec Xcas ou Python

données en connaissance et en actions?

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

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

Quelques Algorithmes simples

Les arbres binaires de recherche

Optimisation des fonctions de plusieurs variables

Guide d implémentation. Réussir l intégration de Systempay

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

Les deux points les plus proches

Conventions d écriture et outils de mise au point

INFO-F-425 Modèles mathématiques et algorithmes pour l ordonnancement. Bernard Fortz

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

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

MCMC et approximations en champ moyen pour les modèles de Markov

Quelques algorithmes simples dont l analyse n est pas si simple

Synthèse «Le Plus Grand Produit»

Cours de Master Recherche

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

Programmation linéaire

Introduction à MapReduce/Hadoop et Spark

4. Les structures de données statiques

Algorithmique et structures de données I

MapReduce. Nicolas Dugué M2 MIAGE Systèmes d information répartis

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

Mathématique et Automatique : de la boucle ouverte à la boucle fermée. Maïtine bergounioux Laboratoire MAPMO - UMR 6628 Université d'orléans

Programmation parallèle et distribuée (Master 1 Info )

Algorithmique & programmation

FACTURATION. Menu. Fonctionnement. Allez dans le menu «Gestion» puis «Facturation» 1 Descriptif du dossier (onglet Facturation)

L apprentissage automatique

Plus courts chemins, programmation dynamique

Chapitre 10. Les interfaces Comparable et Comparator 1

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

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

Programmation Linéaire - Cours 1

Intelligence Artificielle Planification

Créer et modifier un fichier d'import des coordonnées approximatives avec Excel

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

Bases de données documentaires et distribuées Cours NFE04

Rapport de Stage. Titre : Clustering à l aide d une représentation supervisée

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

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

Une introduction aux codes correcteurs quantiques

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

Cours 1 : Qu est-ce que la programmation?

Indications pour une progression au CM1 et au CM2

Synthèse d'images I. Venceslas BIRI IGM Université de Marne La

Cahier des charges fonctionnel

Outils pour la pratique

Compilation. Algorithmes d'analyse syntaxique

Quelques précisions concernant les commandes de Ticket Restaurant électronique par fichier Excel

Améliorer les performances du site par l'utilisation de techniques de Web Mining

ArtemiS 12 HEAD Data Portal 2.0 HEAD Recorder

UE C avancé cours 1: introduction et révisions

Techniques d interaction dans la visualisation de l information Séminaire DIVA

Recherche dans un tableau

Une dérivation du paradigme de réécriture de multiensembles pour l'architecture de processeur graphique GPU

Editer un script de configuration automatique du proxy

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Francis BISSON ( ) Kenny CÔTÉ ( ) Pierre-Luc ROGER ( ) IFT702 Planification en intelligence artificielle

BASES DE DONNÉES. CNAM Centre associé de Clermont-Ferrand Cycle A Année J. Darmont I. INTRODUCTION II. LES SYSTÈMES HIÉRARCHIQUES

Algorithmes de recherche

RÉALISATION DE GRAPHIQUES AVEC OPENOFFICE.ORG 2.3

Java Licence Professionnelle CISII,

CORRECTION EXERCICES ALGORITHME 1

Représentation d un entier en base b

L ANALYSE EN COMPOSANTES PRINCIPALES (A.C.P.) Pierre-Louis GONZALEZ

Perl Orienté Objet BioPerl There is more than one way to do it

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Algorithmique - Cours et Travaux Dirigés Ecole Normale Supérieure de Lyon

Annexe 6. Notions d ordonnancement.

Définition des Webservices Ordre de paiement par . Version 1.0

De l évaluation individuelle à la performance organisationnelle : Surfer sur les notes!

Intelligence Artificielle et Systèmes Multi-Agents. Badr Benmammar

Transcription:

U. Bordeaux 1 2012-13

Diviser pour régner Une technique très souvent employée pour concevoir des algorithmes efficaces

Diviser pour régner Une technique très souvent employée pour concevoir des algorithmes efficaces Amène naturellement à des algorithmes récursifs

Diviser pour régner Une technique très souvent employée pour concevoir des algorithmes efficaces Amène naturellement à des algorithmes récursifs Idée : pour résoudre un problème de taille n :

Diviser pour régner Une technique très souvent employée pour concevoir des algorithmes efficaces Amène naturellement à des algorithmes récursifs Idée : pour résoudre un problème de taille n : Si n est petit, on le résoud directement

Diviser pour régner Une technique très souvent employée pour concevoir des algorithmes efficaces Amène naturellement à des algorithmes récursifs Idée : pour résoudre un problème de taille n : Si n est petit, on le résoud directement Sinon,

Diviser pour régner Une technique très souvent employée pour concevoir des algorithmes efficaces Amène naturellement à des algorithmes récursifs Idée : pour résoudre un problème de taille n : Si n est petit, on le résoud directement Sinon, On le découpe en sous-problèmes plus petits (par exemple, 2 de taille n/2)

Diviser pour régner Une technique très souvent employée pour concevoir des algorithmes efficaces Amène naturellement à des algorithmes récursifs Idée : pour résoudre un problème de taille n : Si n est petit, on le résoud directement Sinon, On le découpe en sous-problèmes plus petits (par exemple, 2 de taille n/2) On résoud chaque sous-problème

Diviser pour régner Une technique très souvent employée pour concevoir des algorithmes efficaces Amène naturellement à des algorithmes récursifs Idée : pour résoudre un problème de taille n : Si n est petit, on le résoud directement Sinon, On le découpe en sous-problèmes plus petits (par exemple, 2 de taille n/2) On résoud chaque sous-problème On trouve la solution du gros problème en composant les solutions des sous-problèmes

Un exemple (facile et artificiel) Problème : dans une liste L, trouver le maximum

Un exemple (facile et artificiel) Problème : dans une liste L, trouver le maximum Si la liste L ne comporte qu un seul élément : renvoyer cet élément

Un exemple (facile et artificiel) Problème : dans une liste L, trouver le maximum Si la liste L ne comporte qu un seul élément : renvoyer cet élément Sinon, couper la liste de l éléments en deux listes L et L de l/2 et l/2 éléments

Un exemple (facile et artificiel) Problème : dans une liste L, trouver le maximum Si la liste L ne comporte qu un seul élément : renvoyer cet élément Sinon, couper la liste de l éléments en deux listes L et L de l/2 et l/2 éléments Trouver le maximum x de L et y de L, et retourner max(x, y).

Le maximum en Python def Maxi ( L ) : return MaxiRec ( L, 0, l e n ( L ) ) def MaxiRec ( L, g, d ) : i f g==d : return ( L [ g ] ) e l s e : m=(g+d )/2 x=maxirec ( L, g,m) y=maxirec ( L,m+1,d ) i f ( x<y ) : z=y e l s e : z=x return ( z )

Est-ce utile? On avait un algorithme (non récursif) qui calculait le maximum en n 1 comparaisons ; est-ce qu on fait mieux?

Est-ce utile? On avait un algorithme (non récursif) qui calculait le maximum en n 1 comparaisons ; est-ce qu on fait mieux? On écrit une récurrence sur le nombre C(n) de comparaisons faites pour trouver le maximum d une liste de n :

Est-ce utile? On avait un algorithme (non récursif) qui calculait le maximum en n 1 comparaisons ; est-ce qu on fait mieux? On écrit une récurrence sur le nombre C(n) de comparaisons faites pour trouver le maximum d une liste de n : C(1) = 0

Est-ce utile? On avait un algorithme (non récursif) qui calculait le maximum en n 1 comparaisons ; est-ce qu on fait mieux? On écrit une récurrence sur le nombre C(n) de comparaisons faites pour trouver le maximum d une liste de n : C(1) = 0 Pour n 2, C(n) = 1 + C( n/2 ) + C( n/2 )

Est-ce utile? On avait un algorithme (non récursif) qui calculait le maximum en n 1 comparaisons ; est-ce qu on fait mieux? On écrit une récurrence sur le nombre C(n) de comparaisons faites pour trouver le maximum d une liste de n : C(1) = 0 Pour n 2, C(n) = 1 + C( n/2 ) + C( n/2 ) Exercice : Montrer qu il existe une unique suite (C(n)) n 1 qui satisfait cette récurrence. Montrer que, pour tout n 1, C(n) = n 1.

Est-ce utile? On avait un algorithme (non récursif) qui calculait le maximum en n 1 comparaisons ; est-ce qu on fait mieux? On écrit une récurrence sur le nombre C(n) de comparaisons faites pour trouver le maximum d une liste de n : C(1) = 0 Pour n 2, C(n) = 1 + C( n/2 ) + C( n/2 ) Exercice : Montrer qu il existe une unique suite (C(n)) n 1 qui satisfait cette récurrence. Montrer que, pour tout n 1, C(n) = n 1. Conclusion : cet algorithme ne fait pas moins de comparaisons que l algorithme itératif.

Application au tri Fusion de deux listes triées : à partir de deux listes déjà triées dans l ordre croissant, obtenir une liste triée, contenant l union des éléments des deux listes de départ (algorithme non récursif)

Application au tri Fusion de deux listes triées : à partir de deux listes déjà triées dans l ordre croissant, obtenir une liste triée, contenant l union des éléments des deux listes de départ (algorithme non récursif) Si on s y prend bien, la fusion de 2 listes de longueurs l 1 et l 2, se fait en (au plus) l 1 + l 2 1 comparaisons de valeurs, et au moins min(l 1, l 2 ).

Application au tri Fusion de deux listes triées : à partir de deux listes déjà triées dans l ordre croissant, obtenir une liste triée, contenant l union des éléments des deux listes de départ (algorithme non récursif) Si on s y prend bien, la fusion de 2 listes de longueurs l 1 et l 2, se fait en (au plus) l 1 + l 2 1 comparaisons de valeurs, et au moins min(l 1, l 2 ). Tri fusion : en utilisant l algorithme de fusion comme recomposition, on écrit un algorithme diviser pour régner pour trier une liste.

Application au tri Fusion de deux listes triées : à partir de deux listes déjà triées dans l ordre croissant, obtenir une liste triée, contenant l union des éléments des deux listes de départ (algorithme non récursif) Si on s y prend bien, la fusion de 2 listes de longueurs l 1 et l 2, se fait en (au plus) l 1 + l 2 1 comparaisons de valeurs, et au moins min(l 1, l 2 ). Tri fusion : en utilisant l algorithme de fusion comme recomposition, on écrit un algorithme diviser pour régner pour trier une liste. Récurrence pour la complexité dans le cas le pire : C(1) = 0, et pour n 2, C(n) = n 1 + C( n/2 ) + C( n/2 )