Examen du 9 janvier 2009

Documents pareils
Les arbres binaires de recherche

Chapitre 5 : Flot maximal dans un graphe

Licence Sciences et Technologies Examen janvier 2010

STAGE IREM 0- Premiers pas en Python

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)

Chapitre 7. Récurrences

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

1 Recherche en table par balayage

Compression Compression par dictionnaires

Les structures de données. Rajae El Ouazzani

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

Représentation d un entier en base b

Corrigé des TD 1 à 5

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

Algorithmique et Programmation, IMA

Initiation à l algorithmique

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

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Recherche dans un tableau

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

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

BACCALAURÉAT GÉNÉRAL SESSION 2012 OBLIGATOIRE MATHÉMATIQUES. Série S. Durée de l épreuve : 4 heures Coefficient : 7 ENSEIGNEMENT OBLIGATOIRE

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

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

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

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

Eteindre. les. lumières MATH EN JEAN Mme BACHOC. Elèves de seconde, première et terminale scientifiques :

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

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

L exclusion mutuelle distribuée

Les algorithmes de base du graphisme

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

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

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

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

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

Limites finies en un point

Quelques algorithmes simples dont l analyse n est pas si simple

Chapitre 4 : Exclusion mutuelle

Continuité et dérivabilité d une fonction

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

La persistance des nombres

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

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.

Algorithmes de recherche

Initiation à la programmation en Python

Resolution limit in community detection

TP : Gestion d une image au format PGM

Examen Médian - 1 heure 30

Package Java.util Classe générique

Programme Compte bancaire (code)

Théorie et codage de l information

Seconde Généralités sur les fonctions Exercices. Notion de fonction.

ANALYSE GÉNÉRALE - PROPOSITION DE CORRIGÉ. Exercice 1

Programmation linéaire

Fonctions homographiques

Paginer les données côté serveur, mettre en cache côté client

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

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

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

Le langage C. Séance n 4

Cours de Recherche Opérationnelle IUT d Orsay. Nicolas M. THIÉRY. address: Nicolas.Thiery@u-psud.fr URL:

Algorithmique et structures de données I

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

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Baccalauréat ES/L Métropole La Réunion 13 septembre 2013 Corrigé

O, i, ) ln x. (ln x)2

LE PROBLEME DU PLUS COURT CHEMIN

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

Introduction à MATLAB R

ARBRES BINAIRES DE RECHERCHE


Guide à destination des usagers. Mise à jour le 7 mars 2014

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

Conventions d écriture et outils de mise au point

Comment se connecter au VPN ECE sous vista

Durée de L épreuve : 2 heures. Barème : Exercice n 4 : 1 ) 1 point 2 ) 2 points 3 ) 1 point

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

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Solutions du chapitre 4

Représentation des Nombres

Algorithmique et programmation : les bases (VBA) Corrigé

TP3 : Manipulation et implantation de systèmes de fichiers 1

Organigramme / Algorigramme Dossier élève 1 SI

Correction TD algorithmique

Découverte de Python

Optimisation Discrète

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

Ordonnancement temps réel

DOCM Solutions officielles = n 2 10.

Encryptions, compression et partitionnement des données

Cours de Systèmes d Exploitation

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Conception d'un réseau de transport d'électricité

Développement itératif, évolutif et agile

UE Programmation Impérative Licence 2ème Année

Algorithmes pour la planification de mouvements en robotique non-holonome

Algorithmes récursifs

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Transcription:

Algorithmique M1 9/1/9 corrigé Examen du 9 janvier 2009 Université Paris Diderot On applique les algorithmes de cours Exercice 1 Les reines Placer les 4 reines sur un tableau 4 4 en utilisant l algorithme backtracking du cours. Sans énoncer l algorithme montrez toutes les configuration considérées lors de son fonctionnement. Correction. Une configuration consiste à placer les reines sur les colonnes de 1 à k (k=0..4). On la représente par un vecteur de k entiers qui correspondent aux lignes de ces reines 1 13 14 142 2 24 241 2413- trouvé Exercice 2 Flux maximum Pour le réseau ci-dessus on cherche à trouver le flux (flot) maximum en appliquant un algorithme de cours. 1. Choisissez un algorithme (écrivez juste son nom s il s agit d un algorithme connu). Correction. Ford-Fulkerson. 2. Appliquez l algorithme (dessinez toutes ses itérations). 3. Donnez le résultat final : flux maximum et sa valeur. 1

Correction. voir la feuille scannée 2

On adapte un algorithme de cours Exercice 3 Magasin Le nouveau magasin Galeries Fulkerson" a n rayons (r 1, r 2,..., r n ). Pour travailler dans le magasin il y a m 2n vendeurs candidats (v 1, v 2,..., v m ). Les compétences des vendeurs sont représentées par une relation C = {(i, j) vendeur v i peut travailler dans le rayon r j }. On cherche un algorithme qui décide s il est possible d embaucher 2n vendeurs et de les affecter aux rayons en respectant les conditions suivantes : chaque vendeur embauché est affecté à un rayon et un seul ; dans chaque rayon il y a exactement deux vendeurs ; chaque vendeur est compétent dans son rayon. L algorithme doit aussi proposer quels candidats embaucher et comment les affecter aux rayons. 1. Proposez un algorithme efficace pour ce problème. Correction. On définit un réseau qui contient les sommets suivants : source S et T, un sommet pour chaque vendeur : (v 1, v 2,..., v m), un sommet pour chaque rayon (r 1, r 2,..., r n), target T, et les arcs suivants : de S vers chaque v i (capacité 1), de v i vers r j lorsque (i, j) C (capacité 1), de chaque r j vers T (capacité 2). Ensuite on applique Ford-Fulkerson pour trouver un flux entier maximal. Si sa valeur < 2n on répond "impossible". Si sa valeur est 2n, alors on embauche v i si le flux de S à v i est non-nul. Lorsque le flux de v i vers r j est non-nul on affecte le vendeur i au rayon j. 2. Justifiez la correction de votre algorithme (donnez une ébauche de preuve). Correction. Si l algo trouve une solution, elle est correcte Effectivement, on embauche 2n vendeurs, et les contraintes de capacités et de préservation de flux nous garantissent tout ce qu il faut : Chaque vendeur embauché travaille dans un rayon et un seul (flux entrant de v égale 1, donc le flot sortant aussi). Chaque vendeur travaille dans un rayon où il est compétent (sinon on aurait un flux interdit) Le flux sortant de chaque r vaut 2 (nécessaire pour avoir la valeur 2n), donc le flux entrant aussi. Ça signifie qu il y a 2 vendeurs affectés à chaque rayon. Si une solution existe, l algo trouve une solution. Effectivement, à partir d une solution pour le magasin il est possible de construire un flux de valeur 2n. Or, Ford-Fulkerson trouvera un flux optimal, qui aura forcément la valeur 2n aussi (par construction du réseau impossible de faire mieux que 2n). On conclut que notre algo trouve une solution. 3. Analysez sa complexité. Correction. On a V = n + m + 2 sommets et E = O(nm) arcs, on peut construire le réseau en O(nm) opérations. La valeur n excède pas f = 2n. Or, la complexité de Ford-Fulkerson est O( E f ), c est - à dire O(n 2 m) ce qui est raisonnable. 3

On invente des algorithmes Exercice 4 Le champion Les éléments d un tableau donné B = (b 1, b 2,..., b n ) sont des objets dont on peut tester l égalité, mais qu on ne peut pas comparer (ou non plus classer). Le champion de B est l élément présent dans le tableau strictement plus que n/2 fois. 1. Démontrer qu un tableau peut contenir soit 0 soit 1 champion. Correction. Supposons qu un tableau contient 2 champions différents a et b (et éventuellement d autres). Par définition de champion, y a plus de n/2 occurrences de a et plus n/2 occurrences de b - ça fait en tout plus de n objets dans un tableau de n. Contradiction. Donc on a toujours moins de 2 champions. 2. Programmez une fonction booléenne ischamp(x, B, s, f) qui teste est-ce que x est champion de (b s,..., b f ). Indication : c est très facile. Correction. Voici un algo de complexité O(n) (ou, plus précisément, O(f s)) Boolean ischamp(x, B,s,f) count=0 pour i de s à f si x[i]=b count++ si 2*count>f+1-s retourner vrai sinon retourner faux 3. Proposez un algorithme itératif naïf qui trouve le champion ou répond qu il n y en a pas. Quelle est sa complexité? Correction. Il suffit de tester chaque objet avec la fonction précédente. ChampNaif(B,s,f) pour i de s à f si ischamp(b[i],b,s,f) retourner B[i] retourner null Il y au pire n itérations de complexité O(n) chacune, donc la complexité totale est O(n 2 ) 4. Proposez un algorithme plus efficace de type Diviser-Pour-Régner qui trouve le champion ou répond qu il n y en a pas. Indication. On cherche à programmer la fonction Champ(B, s, f) qui renvoie la valeur du champion de (b s,..., b f ) ou null s il n y a pas de champion Coupez le tableau en deux moitiés. Chaque moitié peut avoir ou non son champion (il y a en tout 4 cas). Qu est-ce qu on peut affirmer sur le champion du grand tableau pour chacun de ces 4 cas. Justifiez vos réponses. Donnez un algorithme récursif pour Champ(B, s, f). Correction. L observation clé est que le champion de tableau doit être aussi champion d une de ses moitiés (peut-être des deux). Autrement dit les seuls candidats à tester dans le grand tableau sont les champions de la moitié gauche et le champion de la moitié droite. Ceci justifie l algo DPR suivant : Champ(B,s,f) si s=f retourner B[s] m=(s+f)/div 2 chgauche=champ(b,s,m) 4

si chgauche!=null ET IsChamp(chGauche,B,s,f) retourner chgauche chdroite=champ(b,m+1,f) si chdroite!=null ET IsChamp(chDroite,B,s,f) retourner chdroite retourner null 5. Analysez la complexité de votre algorithme Diviser-Pour-Régner. Correction. La fonction fait deux appels récursifs et encore O(1) opérations. Donc T(n) = 2T(n/2) + O(n), ce qui correspond au cas moyen du Master Theorem, et la complexité est O(n log n). Exercice 5 La monnaie On a un stock illimité de pièces de monnaie de chacune de m valeurs différentes α = p 1, p 2,..., p m. On peut représenter certains montants A avec ces monnaies. Par exemple, pour les pièces de 2, 3, 5 (centimes) et le montant A = 11 il existe des représentations suivantes (et d autres - à la fin de l exercice on saura combien) 11 = 2 + 2 + 2 + 5 11 = 2 + 3 + 3 + 3 Le problème algorithmique à résoudre dans cet exercice est le suivant : étant donné α = p 1, p 2,..., p m et A trouver le nombre de représentations différentes (sans tenir compte de l ordre) du montant A par les pièces α. On utilisera la programmation dynamique pour concevoir un algorithme qui résolve ce problème. 1. Soit R(i, j) le nombre de représentations du montant j avec les i premières pièces p 1,..., p i Écrivez les équations de récurrence pour cette fonction sans oublier les cas de base. Correction. L idée de la récurrence est la suivante : si j p i, alors soit on utilise la dernière pièce (et ensuite on fait la monnaie pour j p i ), soit on ne l utilise pas. Dans le cas où j < p i la pièce p i est inutile. 1 si j = 0 0 sinon si i = 0 R(i, j) = R(i 1, j) sinon si j < p i R(i, j p i ) + R(i 1, j) sinon Une petite optimisation possible mais optionnelle concerne le cas d une seule pièce : 1 si i = 1 j( mod i = 0) R(i, j) = 0 si i = 1 (j mod i 0)... 5

2. Écrivez un algorithme efficace (récursif avec marquage ou itératif) pour calculer R. Correction. On crée un tableau memo[0..m,0..a] pour mémoriser les résultats de nos calculs, et on le remplit de -1. Ensuite on utilise la fonction suivante int R(i,j) si on l a déjà calculé on retourne if memo[i,j]>-1 return memo[i,j] sinon on calcule en utilisant les équations de récurrence if (j==0) R=1 else if (i==0) R=0 else if (i=1) AND j mod i =0 R=1 else if (i=1)and j mod i!=0 R=0 else if (j<p[i]) R= R(i-1,j) else R= R(i,j-p[i])+R(i-1,j) on mémorise et on retourne memo[i,j]=r return R 3. En sachant calculer la fonction choisie R, comment répondre à la question initiale : trouver le nombre de représentations différentes du montant A par les pièces α. Correction. Il suffit d appeler R(m,A). 4. Analysez la complexité de votre algorithme. Correction. L initialisation de memo coûte O(mA). La première visite de chaque case coûte O(1)+ 2 visites d autres cases. Une re-visite coûte O(1). Toutes les premières visites ensemble coûtent O(mA) plus encore O(mA) de re-visites, ce qui donne O(mA). On conclut que la complexité est O(mA). 5. Appliquez votre algorithme à l exemple ci-dessus (α = 2, 3, 5 et A = 11). Correction. R(3, 11) = R(3, 6) + R(2, 11) R(3, 6) = R(3, 1) + R(2, 6) R(3, 1) = R(2, 1) = R(1, 1) = R(0, 1) = 0 R(2, 6) = R(2, 3) + R(1, 6) R(2, 3) = R(2, 0) + R(1, 3) = 1 + R(1, 3) R(1, 3) = 0 R(1, 6) = 1 R(2, 11) = R(2, 8) + R(1, 11) = R(2, 8) + 0 R(2, 8) = R(2, 5) + R(1, 8) = R(2, 5) + 1 R(2, 5) = R(2, 2) + R(1, 5) = R(2, 2) + 0 R(2, 2) = R(1, 2) = 1 6

On remonte R(2, 5) = 1 R(2, 8) = 2 R(2, 11) = 2 R(2, 3) = 1 R(2, 6) = 2 R(3, 6) = 2 R(3, 11) = 4 On a trouvé la réponse : 4. 7