Examen du 11/1/11 -corrigé

Documents pareils
Chapitre 5 : Flot maximal dans un graphe

Parallélisme et Répartition

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

Les arbres binaires de recherche

Resolution limit in community detection

Programmation linéaire

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

Programmation Linéaire - Cours 1

L exclusion mutuelle distribuée

Chapitre 7. Récurrences

Exemples de problèmes et d applications. INF6953 Exemples de problèmes 1

C f tracée ci- contre est la représentation graphique d une

Optimisation for Cloud Computing and Big Data

STAGE IREM 0- Premiers pas en Python

INFO-F Algorithmique 3 et Recherche Opérationnelle

Algorithmique et Programmation, IMA

Cours de Master Recherche

Continuité et dérivabilité d une fonction

Algorithmes récursifs

FIMA, 7 juillet 2005

Licence Sciences et Technologies Examen janvier 2010

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Pourquoi l apprentissage?

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

Méthodes de quadrature. Polytech Paris-UPMC. - p. 1/48

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

1 Recherche en table par balayage

Introduction à la théorie des graphes. Solutions des exercices

Découverte de Python

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

Organigramme / Algorigramme Dossier élève 1 SI

Programmation Par Contraintes

Compléments de documentation Scilab : affichage de texte et formatage de nombres

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

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.

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

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)

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

ARBRES BINAIRES DE RECHERCHE

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

4. Les structures de données statiques

Plan du cours Cours théoriques. 29 septembre 2014

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

Communications collectives et ordonnancement en régime permanent pour plates-formes hétérogènes

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

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

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

La programmation linéaire : une introduction. Qu est-ce qu un programme linéaire? Terminologie. Écriture mathématique

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

Initiation à LabView : Les exemples d applications :

Cryptologie et physique quantique : Espoirs et menaces. Objectifs 2. distribué sous licence creative common détails sur

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

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

TRANSMETTEUR TELEPHONIQUE TTX = SINTEL X

Eléments de Théorie des Graphes et Programmation Linéaire

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Algorithmique et Programmation

Algorithmes de recherche

Quantification Scalaire et Prédictive

Cours Informatique Master STEP

Coefficients binomiaux

Initiation à l algorithmique

Algorithmique et structures de données I

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

Programmation Visual Basic. Visite guidée d'un programme Visual Basic 6.0

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

Séminaire TEST. 1 Présentation du sujet. October 18th, 2013

Calcul Formel et Numérique, Partie I

INF601 : Algorithme et Structure de données

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

Master IAD Module PS. Reconnaissance de la parole (suite) Alignement temporel et Programmation dynamique. Gaël RICHARD Février 2008

Algorithme. Table des matières

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

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

Rappels sur les suites - Algorithme

Quelques algorithmes simples dont l analyse n est pas si simple

Plus courts chemins, programmation dynamique

Factorisation Factoriser en utilisant un facteur commun Fiche méthode

Correction du baccalauréat ES/L Métropole 20 juin 2014

COACH-II Manuel d utilisation

Sauvegarde collaborative entre pairs Ludovic Courtès LAAS-CNRS

DOCM Solutions officielles = n 2 10.

Domain Name System. F. Nolot

L ALGORITHMIQUE. Algorithme

Les algorithmes de base du graphisme

Optimisation Discrète

Programmation linéaire

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

Gestion du projet pour qu'il soit pérenne et collaboratif

Exo7. Limites de fonctions. 1 Théorie. 2 Calculs

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

Correction TD algorithmique

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

Algorithmique et programmation : les bases (VBA) Corrigé

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

Limites finies en un point

Transcription:

lgorithmique M Examen du // -corrigé Université Paris iderot On applique un algorithme de cours Exercice Routage Le serveur est connecté à la machine par un réseau avec les noeuds,,,, les capacités de connexions entre les noeuds sont (en Mbit/s) : 7 L utilisateur de la machine télécharge un très grand fichier du serveur. On veut trouver le routage qui maximise le débit.. Quel problème algorithmique de cours correspond à ce problème de routage? omment s appelle l algorithme du cours? orrection. Problème de flot maximum dans un réseau. lgorithme de Ford-Fulkerson.. ppliquez cet algorithme. onnez toutes les étapes de son application. orrection. essinons d abord le réseau : 7 On trouve le premier chemin améliorant de poids, et on dessine le réseau résiduel.

7 On trouve le second chemin améliorant de poids, et on dessine le réseau résiduel. On trouve le troisième chemin améliorant de poids, et on dessine le réseau résiduel. On trouve le quatrième chemin améliorant de poids, et on dessine le réseau résiduel.

Il ne reste plus de chemin améliorant, l algorithme s arrête. Le flot maximal est montré dans le point suivant. Quel est le débit maximal, quel routage assure ce débit? orrection. Le débit optimal est +++, il est réalisé par le routage suivant(la somme de flots : sur, sur, sur, sur ) : / / / / /7 / / / Un algorithme facile Exercice Valeur encadrée Étant donné un tableau trié d entiers [s..f] et deux entiers ("bornes") a b, on cherche s il existe un élément [i] du tableau tel que a [i] b (s il y en a plusieurs trouvez un) Exemple oit le tableau [..] = [,7,8,,] et les bornes a = 0,b = 0. ans ce cas-là la valeur encadrée existe : c est [] =.. onnez (en pseudocode) un algorithme diviser-pour-régner qui résout ce problème. Expliquez briévement. orrection. oupons le tableau en deux moitiés : [s..m] et [m+..f]. Les trois cas ci-dessous correspondent à trois positions de l élément de milieu [m] par rapport à l intervalle [a,b].

À gauche : [m] < a. ans ce cas-là tous les éléments de la moitié gauche du tableau sont aussi < a, et ne peuvent pas appartenir à l intervalle demandé [a, b]. On va chercher la valeur encadrée dans la moitié droite seulement. edans :a [m] b. On a déjà trouvé une valeur encadrée [m]. On retourne son indice. À droite :b < [m]. e cas est symétrique au premier, la recherche peut être limitée à la moitié gauche du tableau. ette analyse mène à la fonction récursive suivante chercher(s,f) qui renvoie l indice de la valeur encadrée dans le tableau [s..f] (ou s il n y en a pas. On suppose que le tableau, et les bornes a,b sont des variables globales. fonction chercher(s,f) // cas de base si (s=f) si ([s] [a;b]) retourner s sinon retourner // on divise pour régner m=(s+f)/ si [m] < a ind= chercher(m+,f) sinon si a [m] b ind=m sinon ind=chercher(s,m) retourner ind. nalysez sa complexité. orrection. On a réduit un problème de taille n à un seul problème de la taille n/ et des petits calculs en O(), donc la complexité satisfait la récurrence : (n) = (n/)+o(). En la résolvant par Master heorem on obtient que (n) = O(logn).

Un jeu - deux puzzles - deux algorithmes Un omino est un rectangle qui contient lettres, par exemple H (il ne peut pas être retourné). Règle : Une séquence de dominos est une chaîne, si les lettres voisines coïncident sur chaque paire des dominos consécutifs, par exemple H H K K Z Z V. onnée initiale pour les deux puzzles : n pièces de dominos : = x y,..., n = x n y n Puzzle (permutation) : Il faut trouver une permutation de tous ces dominos qui forme une chaîne (selon la règle ci-dessus), si celle-là existe. Puzzle (sous-séquence) : Il faut trouver la plus longue sous-séquence de tous ces dominos qui forme une chaîne (selon la règle ci-dessus). Exemple : Pour les pièces H, Z, K, H K, Z V : la solution du puzzle est H H K K Z Z V ; la solution du puzzle est H H K, ou bien Z Z V. Exercice Premier puzzle - backtracking. On cherche à développer un algorithme de type backtracking qui résout le puzzle.. Écrivez l algorithme (en pseudocode) orrection. On suppose que les pièces sont représentées par deux tableaux x[..n] et y[..n]. On représentera les solutions partielles du problème par un tableau haine[..k] qui contiendra les indices des pièces de domino formant une chaîne. La fonction de backtracking (recherche en profondeur) étant donné haine[..k] cherche une solution de problème qui commence par cette haine. fonction chercher(k) si k=n fficher(haine) stop pour tout ind haine si k=0 compatible(haine[k],ind) haine[k+]=ind chercher(k+) La primitive compatible(i,j) teste si on peut placer le dé i à gauche du dé j. fonction booléenne compatible(i,j) return y[i] == x[j] Le programme principal : initialiser chercher(0) afficher "pas de solution". Expliquez cet algorithme (vous pouvez vous inspirer de l indication) orrection. On définit une k-solution partielle comme une chaîne composée de k dominos (parmi les n pièces données). Une k-solution peut être étendue vers une k + -solution en ajoutant à sa droite une pièce qui () n est pas encore utilisée et () est compatible. On fait une recherche en profondeur dans l arbre se solutions partielles, en commençant par sa racine (la 0-solution vide). On s arrête si on trouve une chaîne qui utilise toutes s pièces (k=n).. Estimez le nombre d opérations nécessaire

orrection. u pire cas on teste toutes les permutations, il y en a n! ce qui donne une complexité exponentielle.. Montrez le déroulement de votre algorithme pour les pièces H, Z, K, H K, Z V. orrection. vide ; H H H K H H K K H H K K Z H H K K Z Z V L algorithme s est donc déroulé sur une seule branche de l arbre, sans retour arrière. Indication : Essayez de répondre aux questions suivantes pour parvenir à un tel algorithme. omment tester que deux dominos peuvent être adjacents? omment définir une solution partielle? Quelle est une solution partielle de taille 0? omment passer d une solution partielle à une solution plus grande? Quand s arrêter? omment représenter une solution partielle par une structure de données? omment représenter les dominos déjà utilisés en chaîne et les dominos encore disponibles? Exercice euxième puzzle - programmation dynamique. On cherche à développer un algorithme de type programmation dynamique qui résout le puzzle. oit c(i) une fonction entière qui donne la longueur de la chaîne la plus longue qui est une sous-séquence de,,... i et qui se termine par la pièce i. Écrivez les équations de récurrence pour cette fonction sans oublier les cas de base. orrection. as de base c() =. Pour i > la sous-chaîne qui nous intéresse est la plus longue parmi les chaînes suivantes : Le dé i seul Pour un j < i et tel que j est compatible avec i on prend la chaîne la plus longue jusqu à j, et on y ajoute le dernier dé i. Ça donne la récurrence suivante {, si i = c(i) = max{,c(j)+ j < i tel que compatible(j,i)}si i >. Écrivez un algorithme efficace (récursif avec marquage ou itératif) pour calculer c. orrection. L algo itératif remplit le tableau [i] par les valeurs de la fonction c(i) pour i de jusqu à n. []= ; pour i de à n faire meilleur= pour j de à i- faire si compatible(j,i) et [j+]> meilleur meilleur=[j]+ [i]=meilleur. En sachant calculer la fonction choisie c, comment trouver la longueur de la sous-chaîne la plus longue parmi,,... i. orrection. Le résultat final est l élément maximum de tout le tableau [..n]

. nalysez la complexité de votre algorithme. orrection. O(n ) à cause de deux boucles imbriquées.. Montrez le déroulement de votre algorithme pour les pièces H, Z, K, H K, Z V. orrection. [] = [] = (il n y a pas de dé compatible à gauche de la -ème pièce). [] = (même raison). [] = max{, [] + } = (les dés et sont compatibles). [] = max{, [] + } = (les dés et sont compatibles).. omment modifier votre algorithme pour qu il trouve la sous-chaîne la plus longue (et non seulement sa longueur). orrection. Pour chaque i il faut mémoriser le meilleur dé j à mettre à gauche de i. Ça donne []= ; J[]=0 pour i de à n faire meilleur= pour j de à i- faire si compatible(j,i) et [j+]> meilleur meilleur=[j]+ ; J[i]=j [i]=meilleur ; On prend le i qui maximise [i] et on compose la sous-chaîne optimale de droite à gauche : i, puis J[i], puis J[J[i]] etc. 7