Algorithmes et structures de données avancés

Slides:



Advertisements
Présentations similaires
Introduction à la Théorie des graphes
Advertisements

La recherche de chemin optimal
Théorie des graphes.
Tris.
Dans cette partie Graphes Eulériens.
Algorithmes et structures de données avancées Cours 7
Algorithmes et structures de données avancées Cours 6 Patrick Reuter
COURS DE MATHEMATIQUES DISCRETES SM
Calculs de complexité d'algorithmes
Voyager à l’aide de l’optimisation combinatoire Simon de Givry
Introduction à la Théorie des graphes
Cours d’Algorithmique
Cours d’Algorithmique
Cours d'algorithmique 11 / Intranet 1 9 janvier 2006 Cours dAlgorithmique N P - complétude.
Bloc1 : Théorie des graphes et problèmes d’ordonnancement
Séminaire Biblio LISC - 3/04/02 Complexité, information Daprès JP Delahaye (1999)
Système formel Nous avons introduit : signes de variables (x, y, z, …), de constantes (0, 1), d’opérations (+, ), de relations (=, ) Axiomes : ce sont.
Séminaire Florin Périer Alain Gély LIMOS
Génération de colonnes
Conception et analyse des algorithmes
Plus courts chemins On présente dans ce chapitre un problème typique de cheminement dans les graphes : la recherche d'un plus court chemin entre deux sommets.
Preuves interactives: IP, AM, MA et isomorphisme de graphe
Algorithmes Branch & Bound
Heuristiques A. Introduction B. Recherche d ’une branche
Chapitre 2 Réductions: exemples et méthodes
Programmation linéaire
GPA750 – Ordonnancement des systèmes de production aéronautique
Théorie des graphes Un peu de vocabulaire.
16 mars 2007Cours de graphes 7 - Intranet1 Cours de graphes Problèmes NP-complets. Réductions polynômiales.
Introduire la dérivée en 1re S comme réponse à une question
Algorithme de Bellman-Ford
Chapitre 2 Réductions: exemples et méthodes
Coloration gap sommet identifiante de graphes
IFT Complexité et NP-complétude
Algorithmes d ’approximation
Recherche Opérationnelle
Mise en oeuvre des MMCs L'utilisation des MMCs en reconnaissance des formes s'effectue en trois étapes : définition de la topologie de la chaîne de Markov,
21 février 2006Cours de graphes 2 - Intranet1 Cours de graphes Les plus courts chemins, les chemins les plus légers : à laide de la vague, à laide de la.
Programmation non procédurale Le projet ECOLE 2000
Atelier de formation : MAT optimisation II (les graphes).
8INF8061 Conception et analyse des algorithmes Comment comparer deux problèmes?
Programmation linéaire en nombres entiers : les méthodes de troncature

IFT Complexité et NP-complétude Chapitre 0 Rappels.
Les limites de la puissance algorithmique
Conception et analyse des algorithmes
IFT Complexité et NP-complétude
Yan Gerard LAIC (Université d’Auvergne)
Graphes 1. Introduction 2. Définition 3. Représentation mémoire
D.E ZEGOUR Ecole Supérieure d’Informatique
D.E ZEGOUR Ecole Supérieure d’Informatique
Algorithmique et programmation (1)‏
Théorie du point fixe 1. Rappel Ensemble ordonné Majorant, Minorant
Programmation procédurale preuves D. Preuves Preuves sur les R-algorithmes. Règle de l'appel (Hoare). Exemple Preuves sur les B-algorithmes (Floyd) Automatisation.
Programmation linéaire en nombres entiers
Complexité des Problèmes Combinatoires Module IAD/RP/RO/Complexité Philippe Chrétienne.
Algorithmes Branch & Bound
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Université Pierre et Marie Curie Laboratoire d’Informatique de Paris VI Département ASIM Analyse et résultats sur le dimensionnement des mémoires pour.
Problème de double digestion
Programmation fonctionnelle Preuve
Aide a la décision avec le tableur
programmation linéaire
Problème de voyageur de commerce
Introduction à la Théorie des graphes
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
Algorithmes Branch & Bound Module IAD/RP/RO Master d ’informatique Paris 6 Philippe Chrétienne.
Cycle, Cocycle, Arbre et Arborescence
Complexité algorithmique
Complexité des Problèmes Combinatoires Module IAD/RP/RO/Complexité Philippe Chrétienne.
Transcription de la présentation:

Algorithmes et structures de données avancés Cours 11 Patrick Reuter http://www.labri.fr/~preuter

Problèmes PARTITION TSP

TSP Logiciel Concorde http://www.tsp.gatech.edu/concorde.html A résolu un TSP de 15,112 villes http://www.tsp.gatech.edu/concorde.html

Théorie de la complexité Repose sur la définition de classes de complexité qui permettent de classer les problèmes en fonction de la complexité des algorithmes qui existent pour les résoudre.

Classes de complexité Parmi les classes les plus courantes, on distingue: Classe P (polynomial) Classe NP (Non déterministe Polynomial)

Classes de complexité Classe P (polynomial): un problème de décision est dans P s'il peut être décidé par un algorithme déterministe en un temps polynomial par rapport à la taille de l'instance.

Classes de complexité Classe NP (Non déterministe Polynomial) : c'est la classe des problèmes de décision pour lesquels la réponse oui peut être décidée par un algorithme non-déterministe en un temps polynomial par rapport à la taille de l'instance.

Non-déterminisme

La classe NP De manière intuitive, dire qu'un problème peut être décidé à l'aide d'un algorithme non-déterministe polynomial signifie qu'il est facile, pour une solution donnée, de vérifier en un temps polynomial si celle-ci répond au problème pour une instance donnée mais que le nombre de solutions à tester pour résoudre le problème est exponentiel par rapport à la taille de l'instance. Le non-déterminisme permet de masquer la taille exponentielle des solutions à tester tout en permettant à l'algorithme de rester polynomial.

Classes de complexité On a trivialement P  NP, En revanche : NP  P ? car un algorithme déterministe est un algorithme non déterministe particulier. En revanche : NP  P ? que l'on résume généralement à P = NP ? est l'un des problèmes ouverts les plus fondamentaux et intéressants en informatique théorique. 1970 : le premier qui arrivera à décider si P et NP sont différents ou égaux recevra le prix Clay (plus de 1.000.000 $)

P = NP ??

Pourquoi c'est difficile de prouver ? (1 sur 2) Le problème de fond est que les algorithmes que l'on programme sont tous déterministes. Pour la bonne et simple raison que l'on ne sait pas construire de machine non déterministe. Ce qui fait que l'on ne peut que simuler un algorithme non déterministe par un algorithme déterministe

Pourquoi c'est difficile de prouver ? (2 sur 2) Or il est démontré qu'un algorithme déterministe qui simule un algorithme non-déterministe qui fonctionne en temps polynomial, fonctionne en temps exponentiel. Ce qui fait que pour de grandes entrées on ne peut pas résoudre le problème en pratique, quelle que soit la puissance de la machine.

Relation entre P et NP (supposé…) Si NP  P NP P

NP difficile Un problème est NP difficile si ce problème est au moins aussi dur que tous les problèmes dans NP. (on utilise parfois la traduction incorrecte NP-dur)

Relation entre P,NP et NP difficile (supposé…) Si NP  P NP difficile NP P

NP complet On dit qu'un problème est NP-complet si il est dans NP il est NP-difficile

NP complet On dit qu'un problème est NP-complet si il est dans NP (borne supérieure ..) il est NP-difficile (borne inférieure ..)

Relation entre P,NP, NP difficile, et NP complet (supposé…) Si NP  P NP difficile NP NP complet P

NP complet Propriétés : Il n’y a pas un seul problème NP complet où il existe une preuve qu'il puisse fournir une réponse correcte en temps polynomial Si pour un problème NP complet on trouve une réponse correcte en temps polynomial, on peut trouver une réponse correcte en temps polynomial pour tous les problèmes en NP complet

Réduction Formellement on définit une notion de réduction : Soient p et q deux problèmes, une réduction de q à p est un algorithme transformant toute instance de q en une instance de p. Ainsi, si l'on a un algorithme pour résoudre p, on sait aussi résoudre q. p est donc au moins aussi difficile à résoudre que q. q est donc au plus aussi difficile à résoudre que p. On écrit aussi q ≤ p ou bien q est réductible à p

Réduction polynomiale Formellement on définit une notion de réduction polynomiale Soient p et q deux problèmes, avec le but d’utiliser la solution de p pour résoudre q une réduction de q à p est un algorithme en temps polynomial transformant toute instance de q en une instance de p. Ainsi, si l'on a un algorithme pour résoudre p, on sait aussi résoudre q.  p est donc au moins aussi difficile à résoudre que q  q est au plus aussi difficile à résoudre que p. On écrit aussi q ≤p p

Transitivité La réduction polynomiale est en fait une relation transitive Si q ≤p p et p ≤p o alors q ≤p o

« aussi dur » La réduction polynomiale est en fait une relation transitive Si q ≤p p, alors « q est au plus aussi difficile que p » Si aussi p ≤p q, alors « p est au plus aussi difficile que q »  p et q sont « à peu près la même difficulté »

NP complet On dit qu'un problème est NP-complet si il est dans NP il est NP-difficile

Prouver si un problème p est NP complet On suppose p  NP, et on argumente comment pour une solution sp donnée, elle peut être vérifié en un temps polynomial 2. q  NP complet avec q ≤p p , et il existe une fonction f qui transforme une solution sq de q en solution f (sq) = sp de p 3. Expliquer pourquoi f est polynomial

EXEMPLE

TSP TSP – Traveling Salesman Problem (Problème du voyageur de commerce) étant donné - n sommets (des « villes ») - et les distances séparant chaque sommet, 3 variantes Variante 1 : Est-ce qu’il y a une chaîne de longueur totale minimale inférieur à B ? Variante 2 : Quel est la longueur totale minimale ? Variante 3 : Quelle est la chaîne de longueur totale minimale ? EXERCICE : à faire pour la prochaine fois, Prouver : 1. Si la variante 1 peut être résolu en temps polynomial avec un algorithme non déterministe, la variante 2 le peut aussi 2. Si la variante 2 peut être résolu en temps polynomial avec un algorithme non déterministe, la variante 3 le peut aussi

TSP Voici un énoncé plus formel du problème du voyageur de commerce sous forme de problème de décision. Données : un graphe complet G = (V,E,φ) avec V un ensemble de sommets, E un ensemble d'arêtes et φ une matrice de distances; un entier B Question : Existe-t-il un cycle passant une et une seule fois par chaque sommet tel que la somme des coûts des arcs utilisés soit inférieure à B

TSP est NP complet

Chemin Hamiltonien Le problème du Chemin Hamiltonien consiste, étant donné un graphe G, à décider s'il existe un chemin dans G passant par chaque sommet une et une seule fois.

Problème HAMILTONIAN

Circuit Hamiltonien Le problème du Circuit Hamiltonien est une variante où le chemin doit finir à son point de départ.

Exemple sur la réduction polynomiale Prouver par réduction polynomiale que le problème HAMILTONIAN est NP complet

CLIQUE Variante 1 (Problème de décision) Considérer le graphe G=(V,E) et un k  N. Est-ce qu'il existe une clique de taille k dans G ? Variante 2 (Problème d'optimisation) Considérer le graphe G=(V,E). Déterminer le plus grand k tel que le graphe G contienne une k-clique. Variante 3 (Problème d'optimisation) Considérer le graphe G=(V,E). Déterminer une clique C dans G telle qu'aucune autre clique C' dans G contienne plus de sommets que C.

CLIQUE Variante 1 (Problème de décision) Considérer le graphe G=(V,E) et un k  N. Est-ce qu'il existe une clique de taille k dans G ? Variante 2 (Problème d'optimisation) Considérer le graphe G=(V,E). Déterminer le plus grand k tel que le graphe G contienne une k-clique. Variante 3 (Problème d'optimisation) Considérer le graphe G=(V,E). Déterminer une clique C dans G telle qu'aucune autre clique C' dans G contienne plus de sommets que C.

CLIQUE La première variante du problème CLIQUE s'appele problème de décision pour les cliques, la deuxième et troisième variante sont des problème d'optimisation. Dans la deuxième variante, la valeur de l'optimisation est satisfaisante, tandis que la troisième variante demande de déterminer la solution optimale. Chaque algorithme pour la variante 3 résoud les variantes 2 et 1, et chaque algorithme pour la variante 2 résoud la variante 1.

CLIQUE Théorème 1 Preuve 1 Si la variante 1 du problème CLIQUE peut être résolu en temps polynomial par un algorithme non-déterministe, la variante 2 peut être résolu également en temps polynomial par un algorithme non-déterministe. Preuve 1 Nous considérons n=|V| différentes entrée pour la variante 1 du problème CLIQUE, avec le paramètre k de 1, .., n. Chaqu'un des n problèmes peut être résolu en temps polynomial par un algorithme non-déterministe. Le plus grand k pour lequel la réponse de la variante 1 est "oui", est la solution pour la variante 2 du problème CLIQUE. (Bien sur, nous pouvons utiliser la recherche binaire (dichotomique) au lieu de la recherche linéaire).

Algorithme pour preuve 1 La fonction existeCliqueVariante1(G,k) : boolean est une fonction pour la Variante 1 du problème CLIQUE. Elle retourne VRAI si le Graphe G contient une clique de taille k, et FAUX sinon. fonction taillePlusGrandeClique(G) : integer; début max = 0; k = 1; tant que k ≤ |V| faire si existeCliqueVariante1(G,k) alors max = k; fin si fin tant que fin

CLIQUE Théorème 2 Preuve 2 Si la variante 2 du problème CLIQUE peut être résolu en temps polynomial par un algorithme non-déterministe, la variante 3 peut être résolu également en temps polynomial par un algorithme non-déterministe. Preuve 2 Nous calculons d'abord la taille kopt de la plus grande CLIQUE de G avec la variante 2. Après, nous traitons les arêtes de E une après l'autre. Nous allons éliminer une première arête de G, et nous calculons la taille k'opt du graphe G' résultant. Si k'opt=kopt,nous avons plus besoin de cet arête. Si k'opt<kopt,nous avons besoin de cet arête pour une clique de taille kopt,et nous rajoutons cet arête à nouveau à G'. Après avoir traité tous les arêtes de cette manière, nous obtenons un graphe G' duquel les arêtes forment une CLIQUE de taille k.

Algorithme pour preuve 2 La fonction existeCliqueVariante1(G,k) est une fonction pour la Variante 1 du problème CLIQUE. Elle retourne VRAI si le Graphe G contient une clique de taille k, et FAUX sinon. fonction determinerGrandeClique(G) : graphe; début E' := E; V' := V; G' := (V',E'); kopt = taillePlusGrandeClique(G); pour chaque e  E faire éliminer e de E' k'opt := taillePlusGrandeClique(G'); si k'opt < kopt alors rajouter e à E' fin si fin pour éliminer tous les sommets v  V' avec dégré(v) = 0; retourner G' fin

Preuve par construction Ces deux preuves sont des preuves constructives, car nous avons donné algorithmes non-déterministe en temps polynomial. Ce sont les preuves les plus convaincantes.

CLIQUE Déterminer si pour une solution donnée si on peut vérifier en un temps polynomial si celle-ci répond au problème pour une instance donnée (dans ce cas-là, c'est équivalent à tester si un graphe est complet …) fonction estUneClique(G) : boolean début resultat := VRAI; pour chaque sommet v  V faire pour chaque sommet w  V faire si pas d'arête (v,w) alors resultat := FAUX; fin si fin pour fin

Problème du sac à dos (KNAPSACK, KP) Un randonneur possède un sac à dos pouvant contenir X kgs, et il dispose d'un ensemble I de N d'objets, chacun pesant un poids xi. Il souhaite savoir s'il existe un sous ensemble J, tel que la somme des poids des éléments de J soit exactement X. Mathématquement : Étant donné : x  N, I={x1,x2,···,xi,···,xn},    trouver    J    tel que   xi = X i  J

Motivation X = 3288 I = {418,1479,579,290,1223,389,1357,593}

Problème du sac à dos (KNAPSACK, KP) il est possible de montrer que le problème du sac à dos est NP-complet dans le cas général

Séquences super-croissantes Il existe des instances du problème du sac-à-dos extrêmement faciles à résoudre, ce sont celles faisant intervenir les séquences super-croissantes : n-1 N  2,.., n, xn >  xi i=1

I = {3,7,15,31,63,151,317,673}. X = 414

Séquences super-croissantes à la base de 2 Le problème du sac à dos est trivial lorsque l'on utilise une séquence super-croissante. Il est tout aussi clair qu'il n'a pas toujours de solution. Ainsi, si l'on choisit la base 2 comme séquence super-croissante, tout nombre pourra se décomposer sur cette base au sens du problème du sac à dos. I = (1,2,4,8,16,32,64,128, .., 2N)

Cryptographie Clés symetriques (ou clé sécrète) Clés asymetriques

Cryptographie Clés symetriques (ou clé sécrète) La clé de chiffrement est identique à la clé de déchiffrement C'est la même clé qui permet à l'éxpéditeur de chiffrer un message et qui permet au destinataire de le déchiffrer Avantage : - rapidité, facilement réalisable sur une puce Difficulté : - Transmission de la clé (seul moyen "sur" : rencontre physique - Grand nombre de clés nécessaire : Pour n utilisateur, n*(n-1) clés sont nécessaires - pas de signature électronique

Cryptographie Clés asymetriques Clé de chiffrement et déchiffrement sont distincts Nécessite une paire de clés : Clé publique pour le chiffrement Clé privée pour le déchiffrement

Clés asymetriques 1. Le destinataire du message génère une paire de clé (clé publique et clé privée) 2. Le destinataire du message transmet la clé publique (même via une voie non-sécurisé) 3. L'expéditeur chiffre son message avec la clé publique (même via une voie non-sécurisé) 4. Le message est transmis 5. Le destinataire déchiffre le message avec sa clé privée

ALICE BOB Clé publique Clé privée

Génération des clés Exigence : Avec la clé privée on peut générer des clés publiques Avec la clé publique on ne peut pas retrouver la clé privé !  "Fonctions à sens unique"

L'algorithme Merkle-Hellman L'algorithme Merkle-Hellman [MH78] est historiquement le premier algorithme montrant le fonctionnement d'un système à clé asymetrique. Il appartient à la famille des algorithmes de cryptage de type ``sac à dos'' (ou knapsack en anglais). [MH78] R.C. Merkle and M.E. Hellman. Hiding information and signatures in trapdoor knapsacks. IEEE transactions on information theory, 24:525--530, 1978.

L'algorithme Merkle-Hellman L'algorithme se décompose de la façon suivante : Choisir une séquence super-croissante {a1,a2,···,an} un nombre N avec N>a1+a2+···+an Choisir un nombre A<N tel que pgcd(A,N)=1 Calculer les bi = (A * ai )  MOD N  La clé publique est ({b1,b2,···,bn})  La clé privée (N,A,{a1,a2,···,an}).

Principe Il suffit maintenant pour l'émetteur de récupérer la clef publique ({b1,b2,···,bn}), qui peut être transmise par n'importe quel canal, même non sûr, puis d'appliquer l'algorithme de cryptage (chiffrage) suivant :

Cryptage par l'algorithme de Merkle-Hellman Soit un message binaire composée de la suite de chiffre (d1d2 ··· dn), avec di=0 ou di=1. Alors, le message crypté c est : n c =  di bi i =1

Décryptage par l'algorithme de Merkle-Hellman Soit le message cryptée c. Soit m = A-1c  MOD   N n Calculons les nombres binaires di' tel que m=i=1=di' ai. Alors di=di', où les di représentent les chiffres du message initial. L'algorithme de décryptage de Merkle-Hellman consiste à résoudre un problème de sac à dos, mais cette fois ci sur une instance super-croissante. INVERSE MODULO

Le Modulo inversé Le modulo inverse d'un entier A MOD N est l'entier A-1 tel que A * A-1 = 1 (mod N) Exemple : A=643, N = 1511 A-1 = 47   [1511]

Vérification On peut aisément vérifier que l'algorithme de décryptage est correct en raison de la propriété suivante : mod N

Sécurité … Supposons maintenant qu'un individu mal intentionné tente de décrypter le message c. Il est en possession de la séquence I={b1,b2,···,bn} et du nombre c. Il lui faut donc résoudre un problème de sac à dos, puisqu'il lui faut trouver le sous ensemble J de I tel que  bj=c j  J Or ce problème de sac à dos n'a a priori aucune structure particulière, puisque la séquence bi n'est pas super-croissante après l'application de la multiplication par A et du modulo N. Ce problème est donc a priori NP-complet.  La sécurité est assuré par la NP complétude du problème du sac à dos !!

EXEMPLE Génération des clés : Nous allons prendre n=8, et {a1,a2,···,a8}={3,7,15,31,63,151,317,673}. Nous choisissons N=1511 et A=643. Nous calculons alors la séquence bi = (A * ai )  MOD N {b1,b2,···,b8}={418,1479,579,290,1223,389,1357,593}, et aussi A-1=47 [1511] 643-1=47   [1511]. Message à transmettre La seule information diffusée est la liste des bi. Message 10011010. Chiffrage Il suffit de calculer puis de transmettre c=418+290+1223+1357=3288. Déchiffrage Pour décrypter le message, nous calculons m=A-1 c   [N]=47 × 3288   [1511]=414. Il nous suffit alors de résoudre le problème du sac à dos avec la séquence super-croissante ai et x=414=317+63+31+3, soit 10011010. Nous retrouvons bien le message initial.