Algorithmique et Analyse d Algorithmes



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

Quelques Algorithmes simples

Les structures de données. Rajae El Ouazzani

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

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

Chapitre 5 : Flot maximal dans un graphe

Big Data et Graphes : Quelques pistes de recherche

MIS 102 Initiation à l Informatique

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

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

Big Data et Graphes : Quelques pistes de recherche

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

Algorithmes récursifs

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

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

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

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

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

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

Plus courts chemins, programmation dynamique

Représentation d un entier en base b

Informatique Générale

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


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

Resolution limit in community detection

Recherche dans un tableau

chapitre 4 Nombres de Catalan

LE PROBLEME DU PLUS COURT CHEMIN

TP N 57. Déploiement et renouvellement d une constellation de satellites

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

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

Initiation à l algorithmique

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

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

Chp. 4. Minimisation d une fonction d une variable

Fondements de l informatique Logique, modèles, et calculs

1 Recherche en table par balayage

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

Programmation linéaire

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

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

Algorithmique et Programmation, IMA

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

Deux disques dans un carré

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Annexe 6. Notions d ordonnancement.

Algorithmique et Programmation Fonctionnelle

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

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

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Les algorithmes de base du graphisme

Organigramme / Algorigramme Dossier élève 1 SI

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

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Initiation à LabView : Les exemples d applications :

Algorithmique et Programmation

Model checking temporisé

Programmes des classes préparatoires aux Grandes Ecoles

INF601 : Algorithme et Structure de données

Université de Strasbourg UFR de Mathématique et d'informatique. L2 Informatique Semestres S3 et S4. Structures de Données et Algorithmes 1 et 2

MABioVis. Bio-informatique et la

Continuité et dérivabilité d une fonction

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

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Cours d Algorithmique et de Langage C v 3.0

Vision industrielle et télédétection - Détection d ellipses. Guillaume Martinez 17 décembre 2007

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

Arbres binaires de décision

Formats d images. 1 Introduction

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

Objets Combinatoires élementaires

1 Introduction au codage

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

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

Initiation. àl algorithmique et à la programmation. en C

Java Licence Professionnelle CISII,

Compression de Données - Algorithme de Huffman Document de Conception

F411 - Courbes Paramétrées, Polaires

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

Ordonnancement. N: nains de jardin. X: peinture extérieure. E: électricité T: toit. M: murs. F: fondations CHAPTER 1

Cours de Master Recherche

Microsoft Excel : tables de données

Chap. 3: Le modèle de données entité-association (E.A.)

Cours Optimisation Partie Optimisation Combinatoire. Année scolaire Gérard Verfaillie ONERA/DCSD/CD, Toulouse

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

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Modélisation des données

Chapitre 2. Eléments pour comprendre un énoncé

(51) Int Cl.: H04L 29/06 ( ) G06F 21/55 ( )

Jean-Philippe Préaux

Analyse en Composantes Principales

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Théorie des Langages

Image d un intervalle par une fonction continue

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

Algorithmes de recherche

Transcription:

Algorithmique et Analyse d Algorithmes L3 Info Cours 11 : Arbre couvrant Prétraitement Benjamin Wack 2015-2016 1 / 32

La dernière fois Rappels sur les graphes Problèmes classiques Algorithmes d optimisation Aujourd hui Arbre couvrant Prétraitement : algorithme de Knuth-Morris-Pratt 2 / 32

Plan Arbres dans les graphes Notions générales Le problème de l arbre couvrant Algorithmes de calcul d un arbre couvrant Problème et algorithme naïf Raffinement Algorithme de Knuth-Morris-Pratt 3 / 32

Arbres dans les graphes Notions générales Rappels On ne considère aujourd hui que des graphes non orientés : La relation R est symétrique. Une arête correspond à une paire d arcs (x, y) et (y, x). Chaîne Une chaîne est une suite de sommets (x 0, x 1,... x k ) telle que pour tout 0 < i k, (x i 1, x i ) est une arête du graphe (ou (x i, x i 1 )). Graphe connexe Un graphe est (fortement) connexe si et seulement si, pour tout couple de sommets x et y, il existe une chaîne entre x et y. 5 / 32

Arbres dans les graphes Notions générales Rappels (suite) Cycle Un cycle est une chaîne de longueur non nulle : dont les extrémités sont identiques ; de longueur k supérieure ou égale à 3 ; telle que pour tout 0 i < k 1, x i est distinct de x i+2. Attention, dans un graphe orienté on parle plutôt de chemin et de circuit. Les mots chaîne et cycle sont réservés au cas où on ne se préoccupe pas de l orientation. 6 / 32

Arbres dans les graphes Notions générales Arborescence Arbre Un arbre est un graphe non orienté, connexe et sans cycle. Attention, la notion est un peu différente de celle(s) définie(s) plus tôt : Aucune contrainte d arité Pas de notion de racine Propriétés évidentes Un arbre à n sommets comporte n 1 arêtes. Entre deux sommets donnés d un arbre, il existe toujours exactement une chaîne (élémentaire). 7 / 32

Arbres dans les graphes Le problème de l arbre couvrant Sous-graphe Sous-graphe Si G = (X, R), un sous-graphe de G est un graphe H = (Y, Q) avec Y X et Q R. Les extrémités de toutes les arêtes de Q font évidemment partie de Y. Un sous-graphe de G est dit couvrant s il contient tous les sommets de G. Attention, un sous-graphe couvrant n est pas forcément connexe. 9 / 32

Arbres dans les graphes Le problème de l arbre couvrant Arbre couvrant Tout graphe connexe admet un arbre couvrant. Si A est un sous-graphe couvrant d un graphe G ayant V sommets, les caractérisations suivantes sont équivalentes : A est un arbre couvrant de G A est sans cycle et possède V 1 arêtes A est connexe et possède V 1 arêtes on ne peut pas ajouter une arête à A sans créer un cycle on ne peut pas retirer une arête à A sans briser sa connexité Caractérisations particulièrement utiles pour l écriture d algorithmes : le nombre d arêtes est un bon critère d arrêt ; l absence de cycle (resp. la connexité) est un invariant à maintenir. 10 / 32

Arbres dans les graphes Le problème de l arbre couvrant Dans un graphe pondéré Rappel Un graphe aux arêtes pondérées est un graphe muni d une fonction de poids f : R Z (ou R). Le poids d un sous-graphe est la somme des poids de ses arêtes. On recherche alors un arbre couvrant de poids minimal (en anglais Minimum Spanning Tree). 5 7 1 2 3 4 2 8 11 / 32

Arbres dans les graphes Le problème de l arbre couvrant Application Problème proposé (et résolu) en 1926 pour la construction de réseaux électriques efficaces. Les sommets de G représentent des lieux à connecter : villes, ordinateurs, etc. Les arêtes de G représentent les liens (routes, câbles, tuyaux...) potentiels entre ces lieux, avec les coûts effectifs de création (ou d activation) de ces liens. L arbre couvrant minimal est le réseau le moins coûteux ne laissant aucun lieu isolé. Attention : on minimise le coût global du réseau, pas les longueurs des chemins dans l arbre. Il existe des variantes du problème contraignant la forme de l arbre obtenu : degré borné pour chaque sommet ; diamètre borné ; etc. 12 / 32

Algorithmes de calcul d un arbre couvrant Algorithmes de détermination d un arbre couvrant Deux idées duales : A := (X, ) (le graphe vide) tant que nbaretes(a) < V 1 faire Choisir une arête de G qui ne crée pas de cycle. Ajouter cette arête à A. A := (X, R) (le graphe G) tant que nbaretes(a) > V 1 faire Choisir une arête de A qui n est pas indispensable à la connexité. Retirer cette arête à A. Par construction le graphe A obtenu est un arbre couvrant (pour peu que G soit connexe). Critère de choix ne pas créer de cycle : assez facile vérifier la connexité : moins facile (algorithme Reverse-Delete) 14 / 32

Algorithmes de calcul d un arbre couvrant Choisir une arête Toute arête qui ne crée pas de cycle convient. Pour que l arbre soit minimal, il faut choisir l arête en tenant compte des poids. Là encore, deux politiques : Minimalité d abord : Algorithme de Kruskal (cf TD) On choisit l arête de poids minimal dans tout le graphe. En cours d algorithme A est une forêt. Il faut mémoriser si deux sommets sont dans des composantes connexes distinctes : utilisation de Union-Find. Connexité d abord : Algorithme de Prim On choisit l arête de poids minimal parmi celles incidentes à A. En cours d algorithme A est un arbre. Il suffit qu une extrémité de l arête choisie soit hors de A. 15 / 32

Problème et algorithme naïf Le problème On recherche un motif dans un texte, mais en général le motif et le texte peuvent être : des suites de caractères (ASCII ou pas) des suites d octets dans un fichier quelconque des séquences ADN (suites de bases ATGC)... Formalisation Plus généralement, on considère : un alphabet A fini deux suites ordonnées d éléments de A (le texte et le motif ) et on cherche à répondre à différentes questions plus ou moins équivalentes : le motif apparaît-il dans le texte? si oui, déterminer la première position où il apparaît ; déterminer toutes les positions où ce motif apparaît. 17 / 32

Problème et algorithme naïf Structures de données et notations On considère que le texte et le motif sont stockés dans des tableaux, ce qui permet de se déplacer arbitrairement dans l un ou dans l autre. (Concrètement ce n est pas forcément le cas : flot/stream...) On notera : T le tableau contenant le texte et n sa longueur. M le tableau contenant le motif et k sa longueur. (indexés à partir de 0) Par exemple, soit l alphabet A = {a, b, c}. Si on recherche le motif abaa dans aacabacabaabaaa : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 a a c a b a c a b a a b a a a M présent aux positions 7 et 10 de T. Ces deux occurrences se chevauchent : la lettre a = T [10] est commune. 18 / 32

Problème et algorithme naïf Un algorithme naïf a a c a b a c a b a a b a a a a b a a i := 0 ; j := 0 tant que j<k && i n-k faire j := 0 tant que j<k && T[i] = M[j] faire j := j + 1 i := i + 1 return i // motif absent si j < k Complexité Au pire k boucles internes et n k boucles externes D où O(k (n k)), soit O(k n) si k n Pire cas atteint pour M = bbba et T = bbbbbbbbbbbbb 19 / 32

Raffinement Des économies possibles Tests redondants Lorsqu un préfixe de M est présent à une position i de T : on examine déjà les caractères T [i + 1], T [i + 2],... avant d échouer mais on ne conserve pas cette information donc on les examine à nouveau pour tester la présence de M à la position i + 1 Qu a-t-on appris ici? a a c a b a c a b a a b a a a a b a a T [4] = b donc inutile de chercher abaa pour i = 4 ; T [5] = a donc on pourrait chercher baa à partir de i = 6 ; mais T [6] b et donc inutile de continuer la recherche à cet endroit. 21 / 32

Raffinement L idée Ce qu il faut faire n est pas toujours si clair Si on recherche maman dans un texte commençant par mamam..., quelles sont les possibilités encore viables après l échec? On prend un parti pris : un caractère de T ne sera jamais lu plusieurs fois ; en cas d échec on revient en arrière dans M autant que possible. Pour cela, il ne suffit pas de connaître M sous forme d un tableau : il faut analyser finement la structure de ce motif cela ne dépend pas de T on peut donc le faire une fois pour toutes en amont de l algorithme : phase de pré-traitement si possible peu coûteux, et en tous cas qui accélère la suite 22 / 32

Raffinement Représentation de M comme un automate On cherche à mémoriser toutes les positions de M correspondant à la dernière lettre lue dans T. Pour cela on construit l automate qui reconnaît M : 0 m 1 a 2 m 3 a 4 n 5 Puis on l enrichit avec des retours vers les positions antérieures : j 0 m 1 m a m 2 m 3 a le plus long préfixe de M égal à un suffixe de M[1..j] Implicitement, toutes les transitions manquantes reviennent à 0. m m a 4 n 5 23 / 32

Raffinement Représentation de M comme un automate : utilisation 0 m 1 m a m 2 m 3 Il suffit désormais de suivre les transitions de l automate pour le texte T, l état final marque la présence du motif. Complexité Chaque caractère de T est lu une seule fois : recherche du motif en O(n) m m a 4 n 5 Mais calcul de l automate coûteux : Pour chaque position j dans M, pour chaque symbole de A, il faut tester l égalité entre j préfixes de longueurs 1, 2... j. Au total : O(k 3 A ) En fait on peut se ramener à O(k A ) Cependant il n est exécuté qu une seule fois en pré-traitement 24 / 32

Algorithme de Knuth-Morris-Pratt La recherche du motif En cas d échec on recule dans M indépendemment du prochain symbole : D[j] donne la position la plus à droite dans M d où reprendre D[j] = 0 si rien ne convient et qu il faut avancer dans T. i := 0 ; j := 0 tant que i < n faire si T [i] = M[j] alors i := i + 1 j := j + 1 sinon si D[j] > 0 alors j := D[j] sinon i := i + 1 j := 0 si j = k alors renvoyer i k renvoyer motif absent 26 / 32

Algorithme de Knuth-Morris-Pratt Pré-traitement : calcul de D Objectif Pour toute position j dans M, on cherche la longueur d du plus long préfixe de M de la forme M[j d... j 1]. C est cette longueur que l on appellera D[j]. C est plus simple que ça n en a l air : Si M[j d... j 1] est un préfixe de M, alors M[j d... j 2] aussi. Par conséquent : Si M[j 1] = M[d] alors alors on prolonge le préfixe (éventuellement vide) déjà reconnu Sinon on essaye de se rabattre sur un préfixe plus court, le meilleur est donné par D[d] S il n y a plus de préfixe plus court utilisable (D[d] = 0) on repart du début de M 27 / 32

Algorithme de Knuth-Morris-Pratt Pré-traitement : calcul de D (suite) calcul_d(m) Données : Un motif de longueur k Résultat : La table D utilisée dans l algorithme KMP D[0] := 0 D[1] := 0 d := 0 est la longueur du plus long préfixe déjà identifié pour j := 2 a k faire tant que d > 0 et M[j 1] M[d] faire d := D[d] si M[j 1] = M[d] alors d := d + 1 D[j] := d renvoyer D 28 / 32

Algorithme de Knuth-Morris-Pratt Traduction en termes d automate Cela revient à construire 0 m 1 où ɛ représente une transition vide a 2 m a 3 4 On lève le non-déterminisme en imposant de ne suivre les transitions vides que si les transitions vraies ont échoué. ɛ Comme il y a au maximum une transition vide à partir de chaque état, il y en a au maximum k au lieu des k A précédentes. ɛ n 5 29 / 32

Algorithme de Knuth-Morris-Pratt Complexité : Recherche du motif On considère la quantité 2i j. À chaque itération du Tantque : tant que i < n faire si T [i] = M[j] alors i := i + 1 j := j + 1 sinon si D[j] > 0 alors j := D[j] sinon i := i + 1 j := 0 si j = k alors return i k } } 2i j augmente de 1 2i j augmente car j diminue 2i j augmente d au moins 2 Comme 2i j est positif et majoré par 2n, il y a au pire 2n itérations. 30 / 32

Algorithme de Knuth-Morris-Pratt Complexité : Prétraitement On considère cette fois 2j d : pour j := 2 a k faire } mais 2j d augmente de 2 tant que d > 0 et M[j 1] M[d] faire d := D[d] 2j d augmente car d diminue si M[j 1] = M[d] alors d := d + 1 D[j] := d } 2j d diminue de 1 Cette quantité étant majorée par 2k, le pré-traitement est en O(k). 31 / 32

Algorithme de Knuth-Morris-Pratt En résumé Aujourd hui Un problème d optimisation : arbre couvrant de poids minimal Un prétraitement peut améliorer la complexité d un algorithme Même coûteux, rentable pour résoudre plusieurs fois un problème Ce semestre Complexité d un algorithme (au pire, au mieux, en moyenne) Preuve de correction, de terminaison Structures de données, type abstrait Structures usuelles : pile, file, FAP, arbre, graphe Arbre de recherche, arbre de codage, tas, arbre couvrant... Schémas algorithmiques : récursivité, glouton, prétraitement 32 / 32