ÉCOLE POLYTECHNIQUE FÉDÉRALE DE LAUSANNE Section d Informatique et de Systèmes de Communication



Documents pareils
Plus courts chemins, programmation dynamique

MIS 102 Initiation à l Informatique

Chapitre 5 : Flot maximal dans un graphe

Recherche dans un tableau

1 Recherche en table par balayage

Chapitre 7. Récurrences

STAGE IREM 0- Premiers pas en Python

Algorithmes de recherche

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

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

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

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

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

Intégration et probabilités TD1 Espaces mesurés Corrigé

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

Vérification de programmes et de preuves Première partie. décrire des algorithmes

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

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

Quelques Algorithmes simples

Programmation Par Contraintes

Théorie des Graphes Cours 3: Forêts et Arbres II / Modélisation

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

Programmation linéaire

Le théorème de Perron-Frobenius, les chaines de Markov et un célèbre moteur de recherche

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée.

Les arbres binaires de recherche

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

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

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

Algorithmique et Programmation, IMA

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

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

Cours d algorithmique pour la classe de 2nde

Cours de Programmation 2

Probabilités. I Petits rappels sur le vocabulaire des ensembles 2 I.1 Définitions... 2 I.2 Propriétés... 2

Parallélisme et Répartition

Exercices Corrigés Premières notions sur les espaces vectoriels

V- Manipulations de nombres en binaire

LE PROBLEME DU PLUS COURT CHEMIN

Licence Sciences et Technologies Examen janvier 2010

ARBRES BINAIRES DE RECHERCHE

Cours d Analyse. Fonctions de plusieurs variables

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

chapitre 4 Nombres de Catalan

Représentation d un entier en base b

Utilisation d objets : String et ArrayList

Initiation à l algorithmique

La fonction exponentielle

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

Initiation à LabView : Les exemples d applications :

Découverte de Python

Les structures de données. Rajae El Ouazzani

Organigramme / Algorigramme Dossier élève 1 SI

IV- Equations, inéquations dans R, Systèmes d équations

Exercices Alternatifs. Quelqu un aurait-il vu passer un polynôme?

Exercices Alternatifs. Quelqu un aurait-il vu passer un polynôme?

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

3 Approximation de solutions d équations

Université Paris-Dauphine DUMI2E 1ère année, Applications

Image d un intervalle par une fonction continue

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 4 : Exclusion mutuelle

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

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

Chp. 4. Minimisation d une fonction d une variable

ELEC2753 Electrotechnique examen du 11/06/2012

Algorithmes pour la planification de mouvements en robotique non-holonome

Théorie de la mesure. S. Nicolay

Initiation à la Programmation en Logique avec SISCtus Prolog

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

Editer un script de configuration automatique du proxy

Module 16 : Les fonctions de recherche et de référence

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

Exe Livret Animateur_Exe Livret Animateur 01/02/11 11:10 Page1

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

L ARBORESCENCE. Qu est-ce qu un dossier? L arborescence?

Suites numériques 3. 1 Convergence et limite d une suite

Cours Informatique Master STEP

1. Structure d'un programme FORTRAN 95

Genie Logiciel Avancé Projet :Gestion d une chaîne hotelier low cost

Programmation Orientée Objet Java

Introduction à MATLAB R

TP 1. Prise en main du langage Python

Équations non linéaires

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

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

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

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Introduction à la théorie des graphes

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

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

modèles génériques applicables à la synthèse de contrôleurs discrets pour l Internet des Objets

DOCM Solutions officielles = n 2 10.

DM 1 : Montre Autoquartz ETA

Trépier avec règle, ressort à boudin, chronomètre, 5 masses de 50 g.

Quatrième partie IV. Test. Test 15 février / 71

Circuits RL et RC. Chapitre Inductance

Qu est-ce que la virtualisation?

Transcription:

ÉCOLE POLYTECHNIQUE FÉDÉRALE DE LAUSANNE Section d Informatique et de Systèmes de Communication Corrigé de la série 9 3 Juin 2005 1. Augmenter les poids a) Soit T l ensemble de tous les arbres couvrants de G(V, E). On sait que T T, w(t ) w(t ) On sait aussi que tous les arbres couvrants ont V 1 arêtes. Si on augmente le poids de chaque arête de G par une constante c, le nouveau poids de T est w(t ) + ( V 1) c alors que pour tout autre arbre couvrant T, le nouveau poids est w(t ) + ( V 1) c, l inégalité reste donc vraie et l arbre T reste ainsi minimal. b) Oui, on sait que le coût d un arbre couvrant minimum est plus petit que le coût de tous les autres arbres couvrants. Si on diminue le poids de l une des arêtes de T d une constante c, son nouveau poids devient w(t ) c. Pour tout autre arbre couvrant T le nouveau poids sera soit w(t ) c (si l arête dont on a diminué le poids appartient à T ), soit w(t ) (si elle n appartient pas à T ). Dans les deux cas le nouveau poids de T est plus petit que le nouveau poids de T. 2. Recherche dans un labyrinthe a) Il y a plusieurs manières de faire. On peut modifier la variante du cours pour mémoriser sur le stack aussi le chemin de retour. Une manière plus simple de procéder est d utiliser un stack implicitement via récursion. Algorithme 1 DfsRecursive Input: s sommet de départ dans un graphe non marqué Output: Traverse le graphe en DFS. Marquer s Print Arrivé à s if s est la sortie then Print Sortie. return true for v neigh(s) do if v non marqué then f ound DfsRecursive(v) if found = true then return true Print De retour sur s return false b) Soit e l arête x y. À l aller, sur un sommet on a toujours la condition que x est marqué et y pas. Immédiatement en arrivant sur y on le marque, ce qui fait que e ne peut être plus jamais réutilisé à l aller. 1

Si e est utilisé à l aller, e est réutilisé au retour (à moins que la sortie du labyrinthe ne soit trouvée avant). À chaque retour correspond exactement un aller, ce qui fait que l arête e est utilisée deux fois au plus. c) L ensemble des arêtes du chemin ne contient pas de cycle (comme DFS ne visite aucun sommet deux fois), et donc le nombre d arêtes qui apparaît dans le chemin est n 1. Ces arêtes seront utilisées au plus deux fois, à l exception de la dernière arête devant la sortie qui est utilisée au plus une fois (car une fois que la sortie est atteinte, on s arrête), ce qui donne un chemin de longueur au plus 2(n 2) + 1 = 2n 3. d) Considérons le graphe à n sommets suivant. V = {s, v 1,..., v n 1 }. E = {(x, y) x = s y = s}. C est une étoile. Montrons que si l on part de s, un chemin de longueur 2l visite l + 1 sommets au plus. On procède par récurrence. Si l = 0, c est clair : on ne visite que s. Sinon, après un déplacement, on se trouve sur un des v i, et le deuxième déplacement retourne forcément vers s. Le reste du chemin est de longueur 2l 2 = 2(l 1), et l hypothèse d induction dit alors que ce bout de chemin visite au plus l sommets. Donc, le chemin total visite au plus l + 1 sommets. Comme il y a n sommets dans le graphe, on en visite alors au plus n 1 avec un chemin de longueur 2n 4 = 2(n 2). e) Un chemin de longueur n 2 ne peut visiter au plus n 1 sommets, mais il y en a n. 3. Dijkstra et Moore-Bellman-Ford a) Sous la condition que la constante soit positive, oui. En effet, la longueur de chaque chemin sera multipliée par la même constante, ce qui fait que le chemin le plus court reste le même. b) Non, pas en général. Considérons un exemple simple : 1 1 s 3 Le plus court chemin de s à t passe évidemment par le troisième sommet dans ce cas. Si on ajoute 100 à chacun des poids, ça ne reste pas vrai. c) Le temps de parcours de l algorithme de Dijkstra est en quelque sorte borné par la longueur du chemin trouvé, ce qui n est pas le cas pour MBF. Prenons un immense graphe avec seulement des poids 1 sur les arêtes et s et t à (petite) distance fixe. MBF fait n itérations en passant par toutes les arêtes, tandis que Dijkstra ne regarde que les sommets qui sont à distance plus petite que celle entre s et t dans le graphe. Un exemple concret, c est le graphe complet. t 2

4. Dijkstra et Programmation Dynamique a) On utilise le graphe du corrigé de la série 6, exercice 1. On attribue des poids huge aux arêtes verticales et huge v i aux arêtes diagonales de la i-ème ligne. (huge est choisi de sorte que tous les poids soient positifs.) Il est alors facile de voir qu un plus court chemin correspond bien à une solution optimale et que son poids sera n huge v opt. b) On fait un cadrillage d arêtes de poids un, et on ajoute des diagonales de poids zéro là où on a une correspondance dans les suites. Dessin-exemple : A B C A B B A A B B A C A B A Le plus court chemin d en bas à droite jusqu en haut à gauche est celui qui passe par le nombre maximal de diagonales, ce qui nous donne aussi une sous-suite optimale. c) Pour le point a) : Si on a un poids maximal pour le knapsack, par niveau on a à peu près 2m arêtes. On a n niveaux, donc à peu pres 2mn = O(mn) arêtes, ce qui correspond à la complexité de l algo DP. Pour le b) : Par nœud du cadrillage, on a au plus 3 arêtes entrantes, donc si on a des sous-suites de longueur m et n, on trouve un nombre d arêtes O(mn), ce qui correspond à la complexité du premier algo LCS. Remarquons que ces correspondances ne sont pas des hasards : chaque arête dans le graphe correspond à une décision que l on prend dans l algo DP correspondant. d) Dans ce cas il n est pas aussi simple de réduire le problème à une application de l algorithme de Dijkstra. La différence structurelle est que dans ce cas, pour trouver une solution optimale à un sous-problème, on utilise les solutions de plusieurs sous-problèmes optimaux. Plus concrètement, considérons le parenthèsement optimal de M i M j. La solution optimale est de la forme (M i M k ) (M k+1 M j ) pour un k, ou M i M k et aussi M k+1 M j sont des solutions optimales (donc on en réutilise deux!). Par opposition, si on considère par exemple le sac à dos pour n objets et poids m, on utilise le fait que la meilleure solution est de la forme { soit {n} S n 1 (m c n ), S n (m) = soit S n 1 (m), 3

donc la solution optimale S n n utilise qu une seule solution optimale de S n 1. 5. L algorithme de Karp a) Soit s x un chemin de poids minimal et de longueur k. On suppose k 2 (l autre cas est immédiatement réglé), et alors on peut écrire ce chemin s u x, où u est l avant-dernier sommet sur ce chemin. Le chemin s u est de longueur k 1 et certainement minimal, parce que sinon on pourrait le remplacer par le chemin minimal et on aura aussi un meilleur chemin de s à x. Donc par hypothèse d induction le poids du morceau s u est F k 1 (u), et le chemin s x a certainement poids F k 1 (u) + w(u, x). Le reste est évident. b) Comme le graphe est connexe, certainement V E 1, ce qui montre que F 0 peut bien être calculé en O( E ) opérations. La suite est par induction sur k. Supposons qu on a déjà calculé F k 1,..., F 0 en O( E k) opérations. Si nous montrons que F k peut alors être trouvé en O( E ), nous avons fini. Il s agit d appliquer la formule du point a). On procède comme suit : F k (x) for (x, y) E do u F k 1 (x) + w(x, y) if u < F k (y) then F k (y) u. Comme V = O( E ), cet algorithme utilise évidemment O( E ) opérations. Il est correct à cause du point précédent. c) D abord on calcule les F k et ensuite le µ. Voir l Algorithme 2 pour les détails. 6. Connexité d un graphe a) On peut par exemple utiliser UnionFind. Dans l algorithme ci-dessous t est un tableau associatif. On sait qu un tableau associatif peut être réalisé de telle façon que les opérations ajouter une clé ainsi que vérifier si une clé est dedans sont O(log(n)), si n objets sont dans le tableau. Par exemple, on peut utiliser un arbre AVL pour avoir cette garantie. for (x, y) E do Call Union(x, y) k 0 for v V do x Représentant de v dans UnionFind if x / t then Ajouter x à t k k + 1 La première boucle utilise O( E log( V )) opérations, car l opération Union coûte au plus log( V ). 4

Algorithme 2 Karp Choisir s V arbitraire. F 0 (x) F 0 (s) 0 for k = 1,..., n do F k (x) for (x, y) E do u F k 1 (x) + w(x, y) if u < F k (y) then F k (y) u. µ µ tmp for k = 0,, n 1 do u Fn(x) F k(x) n k if u > µ tmp then µ tmp u if µ tmp < µ then µ µ tmp La deuxième boucle coûte O( V log( V )) parce que les opérations dans UnionFind ainsi que sur t sont les deux O(log( V )). b) Oui, on peut faire mieux. On peut d abord lier tous les sommets par une liste doublement liée. Ensuite on prend le premier sommet de la liste x et on fait un DFS sur le graphe commençant en x. On enlève chaque sommet de la liste liée pendant que DFS le visite. A la fin de DFS on a enlevé une composante connexe de la liste. On répète le procédé jusqu à ce que la liste soit vide. En procédant de cette manière on touche chaque sommet et chaque arête au plus une fois, et l opération à effectuer est à chaque fois O(1), ce qui donne O( V + E ). c) Une possibilité, c est d utiliser max-flow-min-cut. On munit chaque arête du graphe d une capacité 1. Ensuite on laisse parcourir tous les couples de sommets (s, t) en exécutant à chaque fois l algorithme max-flow-min-cut. Le cut trouvé donne le nombre minimal d arêtes à enlever de sorte que s et t soient dans deux composantes distinctes du graphe. Comme on fait le test avec tous les couples, on doit de cette façon trouver le plus petit cut qui marchera. 7. Attribution optimale a) Le problème ressemble à un problème de bipartite matching, et donc on veut appliquer l algorithme max-flow-min-cut pour le résoudre. La seule subtilité est celle des chambres doubles. On peut la résoudre en travaillant plutôt sur des lits qu on met dans les 5

chambres. Dans les chambres simples on met un lit simple, dans les chambres doubles on en met deux : un pour les informaticiens et un pour les physiciens. b) On obtient le graphe suivant : P1 P2 P3 C1 P4 P5 P6 C2 P7 s P8 P9 C3 t C4 I1 I2 I3 C5 C6 I4 I5 I6 6