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

Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Embed Size (px)

Citation preview

Page 1: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Algorithmes et structures de données avancés

Cours 11

Patrick Reuter

http://www.labri.fr/~preuter

Page 2: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Problèmes

• PARTITION

• TSP

Page 3: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

TSP

• Logiciel Concorde– A résolu un TSP de 15,112 villes

• http://www.tsp.gatech.edu/concorde.html

Page 4: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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.

Page 5: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Classes de complexité

• Parmi les classes les plus courantes, on distingue:

– Classe P (polynomial)– Classe NP (Non déterministe Polynomial)

Page 6: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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.

Page 7: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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.

Page 8: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Non-déterminisme

Page 9: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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.

Page 10: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Classes de complexité

• On a trivialement P NP, – 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 $)

Page 11: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

• P = NP ??

Page 12: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

Page 13: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

• 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.

Pourquoi c'est difficile de prouver ? (2 sur 2)

Page 14: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Relation entre P et NP (supposé…)

• Si NP PNP

P

Page 15: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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)

Page 16: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

• Si NP PNP

P

NP difficile

Page 17: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

NP complet

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

• il est dans NP

• il est NP-difficile

Page 18: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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 ..)

Page 19: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

• Si NP PNP

P

NP difficile

NP complet

Page 20: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

Page 21: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter
Page 22: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

Page 23: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Réduction polynomialeFormellement 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

Page 24: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Transitivité

La réduction polynomiale est en fait une relation transitive

• Si q ≤p p et p ≤p o alors q ≤p o

Page 25: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

« 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é »

Page 26: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

NP complet

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

• il est dans NP

• il est NP-difficile

Page 27: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Prouver si un problème p est NP complet

1. 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

Page 28: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

EXEMPLE

Page 29: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

TSPTSP – 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

Page 30: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

TSPVoici 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

Page 31: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

• TSP est NP complet

Page 32: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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.

Page 33: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Problème HAMILTONIAN

Page 34: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Circuit Hamiltonien

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

Page 35: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Exemple sur la réduction polynomiale

• Prouver par réduction polynomiale que le problème HAMILTONIAN est NP complet

Page 36: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter
Page 37: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter
Page 38: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter
Page 39: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter
Page 40: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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.

Page 41: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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.

Page 42: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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.

Page 43: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

CLIQUE

• Théorème 1Si 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 1Nous 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).

Page 44: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Algorithme pour preuve 1La 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) alorsmax = k;

fin sifin tant que

fin

Page 45: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

CLIQUE

• Théorème 2Si 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 2Nous 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.

Page 46: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Algorithme pour preuve 2La 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

Page 47: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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.

Page 48: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

CLIQUEDé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) : booleandébut

resultat := VRAI;pour chaque sommet v V faire

pour chaque sommet w V fairesi pas d'arête (v,w) alors

resultat := FAUX;fin si

fin pourfin pour

fin

Page 49: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter
Page 50: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter
Page 51: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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 = Xi J

Page 52: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Motivation

• X = 3288

• I = {418,1479,579,290,1223,389,1357,593}

Page 53: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

Page 54: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

Page 55: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

• X = 414

Page 56: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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)

Page 57: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter
Page 58: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Cryptographie

• Clés symetriques (ou clé sécrète)

• Clés asymetriques

Page 59: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

Page 60: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter
Page 61: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

Page 62: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

Page 64: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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"

Page 65: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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.

Page 66: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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}).

Page 67: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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 :

Page 68: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

Page 69: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

Page 70: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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]

Page 71: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

Vérification

mod N

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

Page 72: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

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

Page 73: Algorithmes et structures de données avancés Cours 11 Patrick Reuter preuter

EXEMPLEGé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 b i.

• 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.