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

Preview:

Citation preview

Algorithmes et structures de données avancés

Cours 11

Patrick Reuter

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

Problèmes

• PARTITION

• TSP

TSP

• Logiciel Concorde– 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, – 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

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

Relation entre P et NP (supposé…)

• Si NP PNP

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 PNP

P

NP difficile

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 PNP

P

NP difficile

NP complet

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

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

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

EXEMPLE

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

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

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

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

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.

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

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.

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

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

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

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

mod N

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

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

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.

Recommended