Vous êtes sur la page 1sur 246

Méthodes algorithmiques

Sophie Pinchinat
sophie.pinchinat@irisa.fr

IRISA, Université de Rennes 1

UE ALG – année 2019-2020

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 1 / 201
Contenu

1 Rappels : Fonctions et Ordres de grandeurs

2 Diviser pour Régner

3 Approches Gloutonnes

4 Programmation Dynamique

5 Théorie de la NP-complétude

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 2 / 201
Conception et analyse des algorithmes

Importance du choix d’un modèle technologique d’exécution.


Nous prenons le modèle RAM (Random Access Memory) à processeur unique

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 3 / 201
Conception et analyse des algorithmes

Importance du choix d’un modèle technologique d’exécution.


Nous prenons le modèle RAM (Random Access Memory) à processeur unique

Conception : formuler le problème à résoudre avec une précision mathématique


suffisante de manière à poser une question concrète et définir un algorithme
permettant de résoudre ce problème.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 3 / 201
Conception et analyse des algorithmes

Importance du choix d’un modèle technologique d’exécution.


Nous prenons le modèle RAM (Random Access Memory) à processeur unique

Conception : formuler le problème à résoudre avec une précision mathématique


suffisante de manière à poser une question concrète et définir un algorithme
permettant de résoudre ce problème.
En pratique on s’appuie sur quelques techniques de conception fondamentales, très
utiles pour évaluer la complexité inhérente du problème et pour formuler un
algorithme qui le résout.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 3 / 201
Conception et analyse des algorithmes

Importance du choix d’un modèle technologique d’exécution.


Nous prenons le modèle RAM (Random Access Memory) à processeur unique

Conception : formuler le problème à résoudre avec une précision mathématique


suffisante de manière à poser une question concrète et définir un algorithme
permettant de résoudre ce problème.
En pratique on s’appuie sur quelques techniques de conception fondamentales, très
utiles pour évaluer la complexité inhérente du problème et pour formuler un
algorithme qui le résout.

Analyse d’un algorithme : montrer sa correction (il fait bien ce qu’on veut) et donner
une borne supérieure sur son temps d’exécution et/ou l’espace mémoire qu’il utilise
pour établir son efficacité.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 3 / 201
Conception et analyse des algorithmes

Importance du choix d’un modèle technologique d’exécution.


Nous prenons le modèle RAM (Random Access Memory) à processeur unique

Conception : formuler le problème à résoudre avec une précision mathématique


suffisante de manière à poser une question concrète et définir un algorithme
permettant de résoudre ce problème.
En pratique on s’appuie sur quelques techniques de conception fondamentales, très
utiles pour évaluer la complexité inhérente du problème et pour formuler un
algorithme qui le résout.

Analyse d’un algorithme : montrer sa correction (il fait bien ce qu’on veut) et donner
une borne supérieure sur son temps d’exécution et/ou l’espace mémoire qu’il utilise
pour établir son efficacité.Trois questions systématiques face à un algorithme :
1. Mon algorithme est-il correct, se termine-t-il ?

2. Quelle est sa vitesse d’exécution ?

3. Y-a-t’il moyen de faire mieux ?

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 3 / 201
Objectifs

Connaı̂tre et appliquer les techniques fondamentales de conception d’algorithmes.


Pour cela, il faut comprendre que :

La familiarisation avec ces techniques est un processus progressif

Il faut une expérience pour reconnaı̂tre/flairer le “genre” du problème

Il faut savoir apprécier les nuances subtiles de la nature du problème qui induisent
des effets déterminants sur la difficulté du problème.

Exemple 1
Circuit Eulérien (facile) vs. Cycle Hamiltonien (difficile).
Vous devez être actifs :
Exercice 0.1
Voir par exemple dans [?] la définition de ces deux problèmes et ce qu’on sait
à leur sujet.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 4 / 201
Plan du cours

Nous ébaucherons :
1 Des rappels sur les ordres de grandeur

2 La méthode Diviser pour Régner

3 Les approches gloutonnes

4 La méthode par Programmation Dynamique

5 La méthode par Programmation Linéaire

6 La notion de problèmes NP-complets

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 5 / 201
Rappels : Fonctions et Ordres de grandeurs

Table des Matières

1 Rappels : Fonctions et Ordres de grandeurs

2 Diviser pour Régner

3 Approches Gloutonnes

4 Programmation Dynamique

5 Théorie de la NP-complétude

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 6 / 201
Rappels : Fonctions et Ordres de grandeurs

Quelques fonctions classiques

Complexités classiques
(ordre de grandeur)

O(e n )


 O(n2 )



O(nlog (n))
 O(n)



O(log (n))

Exercice 1.1
Qui est la courbe de qui ?
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 7 / 201
Rappels : Fonctions et Ordres de grandeurs

Nous partirons du principe


que vous avez TOUS
le bagage mathématique décrit dans

la Section 3.2 “NOTATIONS STANDARD ET FONCTIONS


CLASSIQUES”
de
T.H. Cormen, C.E. Leiserson, and R.L. Rivest.
Introduction à l’algorithmique.
Dunod, 1996.

surtout pour la partie logarithme, par exemple le fait que changer la base d’un logarithme
ne modifie la valeur du logarithme que d’un facteur constant

SI VOUS NE CONNAISSEZ PAS CES CHOSES LÀ,


IL EST GRAND TEMPS DE VOUS Y ATTAQUER

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 8 / 201
Rappels : Fonctions et Ordres de grandeurs

Ordres de grandeurs Θ, O, Ω

Dans chaque partie, la valeur de n0 est la valeur minimale, mais n’importe quelle valeur
supérieure fait aussi l’affaire.
(a) La notation Θ borne une fonction entre des facteurs constants. On écrit
f (n) = Θ(g (n)) s’il existe des constantes positives n0 , c1 et c2 telles que, à partir de n0 ,
la valeur de f (n) est toujours comprise entre c1 g (n) et c2 g (n) inclus.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 9 / 201
Rappels : Fonctions et Ordres de grandeurs

Ordres de grandeurs Θ, O, Ω

Dans chaque partie, la valeur de n0 est la valeur minimale, mais n’importe quelle valeur
supérieure fait aussi l’affaire.
(b) La notation O donne une borne supérieure pour une fonction à un facteur constant
près. On écrit f (n) = O(g (n)) s’il existe des constantes positives n0 et c telles que, à
droite de n0 , la valeur de f (n) soit toujours inférieure ou égale à c ∗ g (n).

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 9 / 201
Rappels : Fonctions et Ordres de grandeurs

Ordres de grandeurs Θ, O, Ω

Dans chaque partie, la valeur de n0 est la valeur minimale, mais n’importe quelle valeur
supérieure fait aussi l’affaire.
(c) La notation Ω donne une borne inférieure pour une fonction à un facteur constant
près. On écrit f (n) = Ω(g (n)) s’il existe des constantes positives n0 et c telles que, à
droite de n0 , la valeur de f (n) soit toujours supérieure ou égale à c ∗ g (n).

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 9 / 201
Rappels : Fonctions et Ordres de grandeurs

Ordre de grandeurs/Notations asymptotiques

I + une fonction donnée.


Soit g : IN → R

Définition 2
Θ(g (n)) = {f : IN → RI + | il existe des constantes positives c1 , c2 et n0
telles que c1 g (n) ≤ f (n) ≤ c2 g (n), pour tout n0 ≤ n}

Définition 3
O(g (n)) = {f : IN → RI + | il existe des constantes positives c et n0
telles que f (n) ≤ cg (n), pour tout n0 ≤ n}

Définition 4
Ω(g (n)) = {f : IN → RI + | il existe des constantes positives c et n0
telles que cg (n) ≤ f (n), pour tout n0 ≤ n}

Entraı̂nez-vous pour vous convaincre que vous avez compris. Choisissez f et g .

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 10 / 201
Rappels : Fonctions et Ordres de grandeurs

Encore à vous de jouer !

Il existe une foultitude d’exercices dans les ouvrages de la liste bibliographique du module
permettant de maı̂triser les notions d’ordres de grandeur :

Page 48 et suivantes de Introduction à l’algorithmique, T. H. Cormen, C. E.


Leiserson, R. L. Rivest, Dunod, 1994.
Page 18 et suivantes de Algorithms. Sanjoy Dasgupta, Christos H. Papadimitriou,
Umesh Vazirani. Mcgraw Hill Book Co, 2006.
Page 65 et suivantes de Algorithm Design. Jon Kleinberg, Éva Tardos. Addison
Wesley, 2005.

Exercice 1.2
Montrer que si q est un réel positif, alors f (n) = 1 + q + q 2 + . . . + q n est dans :
1 Θ(1) si q < 1.
2 Θ(n) si q = 1.
3 Θ(q n ) si q > 1.
La morale : en terme d’ordre de grandeur Θ, la somme d’une série géométrique est sim-
plement le premier terme si elle est décroissante, le dernier terme si elle est croissante, ou
le nombre de termes si elle est constante.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 11 / 201
Diviser pour Régner

Table des Matières

1 Rappels : Fonctions et Ordres de grandeurs

2 Diviser pour Régner


Exemple introductif du tri
Principe de la méthode Diviser-pour-Régner
Analyse d’algorithmes Diviser-pour-Régner
Le tri rapide/Quicksort
Calcul du médian ou problème de sélection
Multiplications de nombres à n digits
Multiplications de matrices n × n
Les deux points les plus rapprochés

3 Approches Gloutonnes

4 Programmation Dynamique

5 Théorie de la NP-complétude

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 12 / 201
Diviser pour Régner Exemple introductif du tri

Le problème du tri

Problème 1 (Le tri)


Entrée : un tableau A d’entiers
Sortie : une permutation de A triée

Une approche naturelle

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 13 / 201
Diviser pour Régner Exemple introductif du tri

Un algorithme naturel : le tri par insertion

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 14 / 201
Diviser pour Régner Exemple introductif du tri

Correction du tri par insertion par invariant de boucle

Les invariants de boucle sont des propriétés qui aident à comprendre/expliquer/justifier


pourquoi un algorithme (itératif) est correct. Nous verrons plus tard comment prouver la
correction d’un algorithme récursif.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 15 / 201
Diviser pour Régner Exemple introductif du tri

Correction du tri par insertion par invariant de boucle

Les invariants de boucle sont des propriétés qui aident à comprendre/expliquer/justifier


pourquoi un algorithme (itératif) est correct. Nous verrons plus tard comment prouver la
correction d’un algorithme récursif.

Exemple 5 (un invariant pour l’algorithme


de tri par insertion)
“Au début de chaque itération de
la boucle pour les lignes 1–8, le
sous-tableau A[1..j − 1] se compose
des éléments qui occupaient initia-
lement les positions 1 à j − 1, mais
qui sont maintenant triés.”

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 15 / 201
Diviser pour Régner Exemple introductif du tri

Correction du tri par insertion par invariant de boucle

Les invariants de boucle sont des propriétés qui aident à comprendre/expliquer/justifier


pourquoi un algorithme (itératif) est correct. Nous verrons plus tard comment prouver la
correction d’un algorithme récursif.

Exemple 5 (un invariant pour l’algorithme


de tri par insertion)
“Au début de chaque itération de
la boucle pour les lignes 1–8, le
sous-tableau A[1..j − 1] se compose
des éléments qui occupaient initia-
lement les positions 1 à j − 1, mais
qui sont maintenant triés.”

Une fois l’invariant énoncé, il faut établir rois choses le concernant :


1 Initialisation : l’invariant est vrai avant la première itération de la boucle.

2 Conservation : si l’invariant est vrai avant une itération de la boucle, il le reste


avant l’itération suivante.
3 Terminaison : une fois la boucle terminée ( !), l’invariant fournit une propriété utile
pour montrer la correction de l’algorithme.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 15 / 201
Diviser pour Régner Exemple introductif du tri

Invariant de boucle pour le tri par insertion

Invariant :
”Au début de chaque itération de la boucle pour des lignes 1–8, le sous-tableau
A[1..j − 1] se compose des éléments qui occupaient initialement les positions
A[1..j − 1] mais qui sont maintenant triés.”

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 16 / 201
Diviser pour Régner Exemple introductif du tri

Invariant de boucle pour le tri par insertion

Invariant :
”Au début de chaque itération de la boucle pour des lignes 1–8, le sous-tableau
A[1..j − 1] se compose des éléments qui occupaient initialement les positions
A[1..j − 1] mais qui sont maintenant triés.”
Initialisation j = 2 et le tableau A[1..j − 1] est A[1] qui est trivialement trié.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 16 / 201
Diviser pour Régner Exemple introductif du tri

Invariant de boucle pour le tri par insertion

Invariant :
”Au début de chaque itération de la boucle pour des lignes 1–8, le sous-tableau
A[1..j − 1] se compose des éléments qui occupaient initialement les positions
A[1..j − 1] mais qui sont maintenant triés.”

Conservation : (on pourrait être plus formel).


Le corps de la boucle tant que consiste à déplacer d’une position vers la droite A[j − 1],
A[j − 2], A[j − 3], etc. jusqu’à ce qu’on trouve la bonne position pour A[j] (lignes 4–7).
On insère alors la valeur de A[j] (ligne 8) à la bonne place, et le tout est parfaitement
trié.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 16 / 201
Diviser pour Régner Exemple introductif du tri

Invariant de boucle pour le tri par insertion

Invariant :
”Au début de chaque itération de la boucle pour des lignes 1–8, le sous-tableau
A[1..j − 1] se compose des éléments qui occupaient initialement les positions
A[1..j − 1] mais qui sont maintenant triés.”

Terminaison : La boucle pour extérieure prend fin quand j dépasse n, c-à-d. j = n + 1.


L’invariant de boucle devient :
Le sous-tableau A[1..n] se compose des éléments qui appartenaient originellement
à A[1..n] mais qui sont maintenant triés.
Comme l’algorithme termine, il est correct.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 16 / 201
Diviser pour Régner Exemple introductif du tri

Complexité du tri par insertion (dans le pire cas)

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 17 / 201
Diviser pour Régner Exemple introductif du tri

Complexité du tri par insertion (dans le pire cas)

n
X n
X n
X
T (n) = c1 n + c2 (n − 1) + c4 (n − 1) + c5 tj + c6 (tj − 1) + c7 (tj − 1) + c8 (n − 1)
j=2 j=2 j=2

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 17 / 201
Diviser pour Régner Exemple introductif du tri

Complexité du tri par insertion (dans le pire cas)

n
X n
X n
X
T (n) = c1 n + c2 (n − 1) + c4 (n − 1) + c5 tj + c6 (tj − 1) + c7 (tj − 1) + c8 (n − 1)
j=2 j=2 j=2

On se place dans le cas le plus défavorable, le pire cas : le tableau A est trié en ordre
décroissant et donc tj = j. Or
Pn n(n+1) Pn (n−1)n
j=2 j = 2
−1 et j=2 (j − 1) = 2

Exercice 2.1
Finir le raisonnement pour en déduire que T (n) = O(n2 ).
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 17 / 201
Diviser pour Régner Principe de la méthode Diviser-pour-Régner

Principe de la méthode Diviser-pour-Régner

Elle améliore considérablement le temps d’exécution par “division” en sous-problèmes


indépendants dont les solutions sont recombinées.
On s’attend ainsi à un facteur logarithmique.
On décompose le problème en plusieurs sous-problèmes
On résoud chaque sous-problèmes récursivement
On combine les solutions des sous-problèmes en une solution globale
Par exemple, le Tri Fusion :

Définition 6
30 2 • Premiers pas
On considère Tri-Fusion(A, 1, n) où on a :

T RI -F USION(A, p, r)
1 si p < r (on suppose 1 ≤ p, r ≤ n)
2 alors q ← "(p + r)/2#
3 T RI -F USION(A, p, q)
4 T RI -F USION(A, q + 1, r)
5 F USION(A, p, q, r)

Pour trier toute la séquence A Méthodes


= $A[1],
S. Pinchinat (IRISA, Université de Rennes 1) A[2], . . . , A[n]%, UEonALGfait
algorithmiques – annéel’appel
2019-2020 initial
18 / 201
Diviser pour Régner Principe de la méthode Diviser-pour-Régner

Tri fusion : un exemple

Tri-Fusion(A, 1, n) de coût T (n) :

30

T RI -F USION(A, p, r)
1 si p < r
2 alors q ← "(p + r)/2#
3 T RI -F USION(A, p, q)
Fusion(A, 1, b(n + 1)/2c, n) : 4 T RI -F USION(A, q + 1, r)
5 F USION(A, p, q, r)

Pour trier toute la séquence A = $A[1], A


T RI -F USION(A, 1, longueur[A]) (ici aussi, lo
le fonctionnement de la procédure, du bas v
de 2. L’algorithme consiste à fusionner des
former des séquences triées de longueur 2, à
Lemme 7 (voir la preuve plus loin) longueur 2 pour former des séquences triées
fusion de deux séquences de longueur n/2 pou
L’appel de Fusion(A, p, q, r ) prend un temps linéaire, c’est n. en Θ(q − p + 1).
à dire
longueur
séquence trié
1 2 2 3 4
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 19 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Équations de récurrence

En admettant que l’appel de Fusion(A, 1, b(n + 1)/2c, n) prend un temps en Θ(n),


l’appel de Tri-Fusion(1, n) prend un temps T (n) vérifiant :


Θ(1) si n = 1 // Il n’y a rien à trier
T (n) =
2T (b(n + 1)/2c) + cn si n > 1 // 2 sous-problèmes + la fusion

De manière générale les algorithmes de type DR ont une complexité en temps vérifiant :

Patron des complexités de la méthode DR


Θ(1) si n = 1 (ou sur des valeurs de base)
T (n) =
aT (dn/be) + f (n) si n > 1 (ou pour des “grandes” valeurs ...)

où a ≥ 1, b > 1 et f (n) est une fonction donnée.

Mais comment calculer T (n) ?

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 20 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Complexité de Tri-Fusion - on suppose n = 2k , c-à-d. log2 (n) = k


2.3 Conception des algorithmes 33

T(n) cn cn

T(n/2) T(n/2) cn/2 cn/2

T(n/4) T(n/4) T(n/4) T(n/4)

(a) (b) (c)

cn cn
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 21 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner
T(n/4) T(n/4) T(n/4) T(n/4)
Complexité de Tri-Fusion - on suppose n = 2k
(a) (b) (c)

cn cn

cn/2 cn/2 cn

lg n
cn/4 cn/4 cn/4 cn/4 cn


c c c c c … c c cn

(d) Total: cn lg n + cn

Figure 2.5 La construction d’un arbre de récursivité pour la récurrence T(n) = 2T(n/2) + cn. La
partie (a) montre T(n), progressivement développé en (b)–(d) pour former l’arbre de récursivité.
L’arbre complet, en partie (d), a lg n+1 niveaux (c’est-à-dire,
S. Pinchinat (IRISA, Université de Rennes 1)
il a une hauteur lg n comme indiquée), UE ALG – année 2019-2020
Méthodes algorithmiques 22 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Analyse de l’algorithme de fusion Fusion(A, p, q, r )

à continuer ...

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 23 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Analyse de l’algorithme de fusion Fusion(A, p, q, r )

à continuer ...

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 23 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 24 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Correction de l’algorithme Fusion(A, p, q, r )

Exercice 2.2
Montrer que l’algorithme Fusion(A, p, q, r ) est correct (utiliser un invariant de boucle).

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 25 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Méthodes pour résoudre les systèmes de récurrences


Θ(1) si n = 1
T (n) =
aT (dn/be) + f (n) si n > 1

où a ≥ 1, b > 1 et f (n) est une fonction donnée.

Exercice 2.3
Voir le Chapitre 4 de “Introduction à l’algorithmique”, T. H. Cormen, C. E. Leiserson, R.
L. Rivest, Dunod, 1994.
Dépliage de la récurrence.
Méthode par substitution : on devine une solution et on vérifie qu’elle marche.
Méthode par substitution partielle : on devine une solution mais sans préciser les
constantes.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 26 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Cas de T (n) = 3T (dn/4e) + Θ(n2 )

66 4 • Récurrences

T(n) cn2 cn2

T ( n4 ) T ( n4 ) T ( n4 ) c ( n4 )2 c ( n4 )2 c ( n4 )2

n n n n n n n n n
T ( 16 ) T ( 16 ) T ( 16 ) T ( 16 ) T ( 16 ) T ( 16 ) T ( 16 ) T ( 16 ) T ( 16 )
(a) (b) (c)

cn2 cn2

c ( n )2
S. Pinchinat (IRISA, Université de Rennes 1) ( n )2 algorithmiques
c Méthodes c ( n )2 3
UE ALG – année 2019-2020 cn2 27 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Cas de T (n) = 3T
T (dn/4e)
T T +
T n
( 16 ) n
( 16 ) n
( 16 ) Θ(n
n
( 16
T )
2 )T ( n ) T ( n ) T ( n ) T ( n )
n
( 16 ) 16 16 16 16
(a) (b) (c)

cn2 cn2

c ( n4 )2 c ( n4 )2 c ( n4 )2 3
16 cn2

log4 n
n 2 n 2 n 2 n 2 n 2 n 2 n 2 n 2 n 2 3 2
c ( 16 ) c ( 16 ) c ( 16 ) c ( 16 ) c ( 16 ) c ( 16 ) c ( 16 ) c ( 16 ) c ( 16 ) ( 16 ) cn2


T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1) … T(1) T(1) T(1) Q(nlog4 3 )

nlog4 3

(d) Total : O(n2 )

Figure 4.1 La construction d’un arbre récursif pour la récurrence T(n) = 3T(n/4) + cn2 . La par-
tie (a) montre T(n), progressivement développé dans les parties (b)–(d) pour former l’arbre récur-
sif. L’arbre entièrement développé, en partie (d), a une hauteur de log4 n (il comprend log4 n + 1
niveaux).

On cumule maintenant les coûts de tous les niveaux, afinlog


Le dernier niveau (profondeur log4 n) a 3 de4 ncalculer
de l’arbre :
le coût
= nlog 4 3 global
feuilles, qui ont chacune un coût
log4 3 log4 3
T (1) et qui donnent 3
un
! 3
coût
" 2 total de
! 3
n
" log n−1T (1), qui est dans O(n 4
).
T(n) = cn2 + cn2 + cn2 + · · · + cn2 + Q(nlog4 3 )
16 16 16
log4 n−1 !
#
S. Pinchinat (IRISA, Université 3de"Rennes
i
1)2 Méthodes algorithmiques
log 3 UE ALG – année 2019-2020 27 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Cas de T (n) = 3T (dn/4e) + Θ(n2 )

On cumule maintenant les coûts de tous les niveaux, afin de calculer le coût global de
l’arbre :

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 27 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Cas de T (n) = 3T (dn/4e) + Θ(n2 ) (suite)

On peut maintenant employer la méthode de substitution pour vérifier la validité de la


conjecture, à savoir que T (n) ∈ O(n2 ) est une borne supérieure de la récurrence
T (n) = 3T (dn/4e) + Θ(n2 ).

On montre que T (n) ≤ dn2 pour une certaine constante d > 0.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 28 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Cas de T (n) = 3T (dn/4e) + Θ(n2 ) (suite)

On peut maintenant employer la méthode de substitution pour vérifier la validité de la


conjecture, à savoir que T (n) ∈ O(n2 ) est une borne supérieure de la récurrence
T (n) = 3T (dn/4e) + Θ(n2 ).

On montre que T (n) ≤ dn2 pour une certaine constante d > 0.

la dernière étape étant vraie en choisissant d ≥ ( 16


13
)c.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 28 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Cas de T (n) = T (dn/3e) + T (d2n/3e) + cn

68 4 • Récurrences

cn cn

c ( n3 ) c ( 2n
3) cn

log3/2 n

c ( n9 ) c ( 2n
9) c ( 2n
9) c ( 4n
9) cn


Total : O(n lg n)

Figure 4.2 Un arbre récursif pour la récurrence T(n) = T(n/3) + T(2n/3) + cn.

des feuilles. Si l’arbre était un arbre binaire complet de hauteur log3/2 n, il y au-
rait 2log3/2 n = nlog3/2 2 feuilles. Comme le coût de chaque feuille est une constante,
le coût cumulé de toutes les feuilles serait alors Q(nlog3/2 2 ), qui est v(n lg n). Mais
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – log
année 2
3/22019-2020 29 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

S.
CasDasgupta, C.H.
général T Papadimitriou, and U.V.+Vazirani
(n) = aT (dn/be) O(nd ) avec a > 0, b > 1, d ≥ 0 59

Figure 2.3 Each problem of size n is divided into a subproblems of size n/b.

Size n Branching factor a

Size n/b

Size n/b2
Depth
logb n

Size 1

Width alogb n = nlogb a

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 30 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Théorème fondamental pour la complexité

Théorème 2.1 (Théorème fondamental)


Si T (n) = aT (dn/be) + O(nd ) avec a > 0, b > 1, d ≥ 0, alors
d

 O(n ) si d > logb a
T (n) = O(nd logb n) si d = logb a
O(nlogb a ) si d < logb a

Exercice 2.4
Voir la preuve de ce théorème en Section 4.4 de [?], mais nous en verrons des cas simples
un peu plus loin.

Exercice 2.5
Appliquer le Théorème fondamental (bien pratique !) aux exemples vus justes avant, et
retrouver les résultats établis à la main.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 31 / 201
Diviser pour Régner Analyse d’algorithmes Diviser-pour-Régner

Nous allons voir de nombreux exemples d’utilisation de DR

1 Le tri rapide (Quicksort)


2 Calcul du médian ou problème de sélection
3 Multiplications de nombres à n digits
4 Multiplications de matrices n × n
5 Les deux points les plus rapprochés (si le temps)

mais il y a aussi de nombreuses applications en traitement du signal (l’algorithme FFT,


pour “Fast Fourrier Transformation”), d’autres cas en géométrie (enveloppe convexe)
menant à de grands progrès en conception et dessins assistés par ordinateur.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 32 / 201
Diviser pour Régner Le tri rapide/Quicksort

Le tri rapide/Quicksort

Problème 2 (Le tri)


Entrée : un tableau A d’entiers
Sortie : une permutation de A triée par ordre croissant

Définition 8 (découvert en 1962 par Tony Hoare (11 Janvier 1934-))

Lemme 9
Après l’appel de partition :

pour tout p ≤ k < q, A[k] ≤ A[q], et pour tout q < k ≤ r , A[q] < A[k]
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 33 / 201
Diviser pour Régner Le tri rapide/Quicksort

Algorithme de Partition(A, p, r )

Clairement Partition(A, p, r ) s’exécute en Θ(r − p + 1).


S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 34 / 201
Diviser pour Régner Le tri rapide/Quicksort

Correction de Partition(A, p, r ) sur un exemple

Invariant de boucle
∀i 0 , p ≤ i 0 ≤ i, A[i 0 ] ≤ x et ∀j 0 , i + 1 ≤ j 0 ≤ j − 1, A[j 0 ] > x
Conservation

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 35 / 201
Diviser pour Régner Le tri rapide/Quicksort

Complexité du tri rapide

Le cas le plus défavorable intervient pour le tri rapide quand Partition produit un
sous-problème à n − 1 éléments et un autre avec 0 élément. Cas d’une séquence déjà
triée (croissante ou décroissante). La récurrence devient alors

T (n) = T (n − 1) + Θ(n)

de sorte que T (n) = Θ(n2 ).

Le cas le plus favorable s’obtient lorsque le pivot vient toujours se placer “au
milieu” : la récurrence devient

T (n) = 2T (n/2) + Θ(n)

dont on déduit par le Théorème Fondamental que T (n) = O(nlogn).

Remarque 2.1
Dans [?, Chapitre 7] consacré aux algorithmes probabilistes, il est montré que la complexité
en moyenne est O(nlogn) si le pivot est choisi aléatoirement.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 36 / 201
Diviser pour Régner Le tri rapide/Quicksort

Complexité du tri rapide

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 37 / 201
Diviser pour Régner Le tri rapide/Quicksort

Complexité intrinsèque du tri par comparaison

Voir Page 63 de [?] :


On considère les arbres de décision.
On rappelle qu’un arbre
binaire de hauteur d a au plus
2d feuilles.
Donc l’arbre de décision doit
avoir une hauteur d’au moins
log (n!).
n
Or n! ≥ ( n2 )( 2 ) , donc
log (n!) ≥ cnlog (n) pour un
certain c > 0, d’où
log (n!) ∈ Ω(nlog (n)).

On en déduit :
Théorème
Tout arbre de décision d’un tri pour n éléments a une hauteur en Ω(nlog (n)).

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 38 / 201
Diviser pour Régner Calcul du médian ou problème de sélection

Le problème de Sélection

Problème 3 (Le problème de Sélection)


Entrée : une liste d’entiers S et un entier i
Sortie : l’élément de rang i

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 39 / 201
Diviser pour Régner Calcul du médian ou problème de sélection

Définitions

Problème 4 (Le problème de Sélection)


Entrée : une liste d’entiers S et un entier i
Sortie : l’élément de rang i

Définition 10
Le i-ème rang d’un ensemble à n éléments est le i-ème plus petit élément.

Exemple 11
Le minimum d’un ensemble (à n éléments distincts) est l’élément de rang 1, et le maximum
est l’élément de rang n.

Définition 12
Un médian d’un ensemble à n éléments est un élément “au milieu” :
Si n est impair, il est unique et c’est celui de rang (n + 1)/2.
Si n est pair, il existe deux médians de rangs respectifs
n/2 (médian inférieur)
n/2 + 1 (médian supérieur)
On convient de prendre b(n + 1)/2c.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 40 / 201
Diviser pour Régner Calcul du médian ou problème de sélection

Calcul de l’élément de rang i

Problème 5 (Le problème de Sélection)


Entrée : une liste d’entiers S et un entier i
Sortie : l’élément de rang i

Solution 1 (le coup de marteau) : Il suffit de trier, donc O(nlogn), mais on fait plus
que demandé.

Peut-on faire mieux ? Par exemple en O(n) ?

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 41 / 201
Diviser pour Régner Calcul du médian ou problème de sélection

Calcul de l’élément de rang i

Problème 5 (Le problème de Sélection)


Entrée : une liste d’entiers S et un entier i
Sortie : l’élément de rang i

Solution 1 (le coup de marteau) : Il suffit de trier, donc O(nlogn), mais on fait plus
que demandé.

Peut-on faire mieux ? Par exemple en O(n) ?

Solution 2 : Diviser-pour-Régner.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 41 / 201
Diviser pour Régner Calcul du médian ou problème de sélection

Un algorithme Diviser-pour-Régner pour le problème de sélection

Si on se fixe une valeur v , et on considère la scission de S en 3 sous-listes d’éléments :


SL ceux plus petits que v , Sv ceux égaux à v , et SR ceux plus grands que v .

Exemple 13
Soit S : 2 36 5 21 8 13 11 20 5 4 1 et v = 5. Alors
SL : 2 4 1 Sv : 5 5 SR : 36 21 8 13 11 20 .

On voit que EltDeRang (S, 8) = EltDeRang (SR , 3)

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 42 / 201
Diviser pour Régner Calcul du médian ou problème de sélection

Un algorithme Diviser-pour-Régner pour le problème de sélection

Si on se fixe une valeur v , et on considère la scission de S en 3 sous-listes d’éléments :


SL ceux plus petits que v , Sv ceux égaux à v , et SR ceux plus grands que v .

Exemple 13
Soit S : 2 36 5 21 8 13 11 20 5 4 1 et v = 5. Alors
SL : 2 4 1 Sv : 5 5 SR : 36 21 8 13 11 20 .

On voit que EltDeRang (S, 8) = EltDeRang (SR , 3)

Plus généralement :


 EltDeRang (SL , i) if i ≤ |SL |
EltDeRang (S, i) = v if |SL | < i ≤ |SL | + |Sv |
EltDeRang (SR , i − |SL | − |Sv |) if i > |SL | + |Sv |

et le médian correspond à EltDeRang (S, b(n + 1)/2c)

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 42 / 201
Diviser pour Régner Calcul du médian ou problème de sélection

Complexité du calcul de EltDeRang (S, b(n + 1)/2c)


 EltDeRang (SL , i) if i ≤ |SL |
EltDeRang (S, i) = v if |SL | < i ≤ |SL | + |Sv |
EltDeRang (SR , i − |SL | − |Sv |) if i > |SL | + |Sv |

À v fixé le calcul de SL , Sv et SR se fait en O(n)


(et on peut même faire ce calcul en place)
Imaginons qu’à chaque appel récursif on choisisse la valeur v à de sorte que
|SL |, |SR | ≈ 21 |S|.
Alors le calcul de EltDeRang (S, b(n + 1)/2c) a une complexité T (n) telle que

T (n) = T (n/2) + O(n)

On a un algorithme en O(n) !

On peut montrer qu’il suffit de choisir v aléatoirement


(hors cours, voir [?, p. 65])

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 43 / 201
✓ ◆i
11n X 9 11n
Diviser pour Régner Multiplications de nombres à n digits
T (n)  = · 10 = 22n.
Multiplications5dei 10 5
0nombres à n digits

cation
digitProblème
numbers takes O(n) time by the standard de
6 (Multiplications iterative ‘ripple-carry’
nombres à nalgorithm,
digits) using a
r each one-digit addition. Similarly, multiplying an n-digit number by a one-digit number
e, using essentially
Entrée the same
: deux algorithm.
entiers codés sur n digits
t multiplying
Sortie :twoleurn-digit numbers? At least in the United States, every grade school
produit
sedly) learns to multiply by breaking the problem into n one-digit multiplications and n
La multiplication à l’école :
31415962
⇥ 27182818
251327696
31415962
251327696
62831924
251327696
31415962
219911734
62831924
853974377340916

8
2
Un algorithme en O(n ). On peut faire mieux avec DR !

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 44 / 201
O(n2 ) time. Diviser pour Régner Multiplications de nombres à n digits

We can get a more efficient algorithm by exploiting the following identity:


Si on découpe les nombres
(10m a + b)(10m c + d) = 102m ac + 10m (bc + ad) + bd

Here is a divide-and-conquer algorithm that computes the product of two n-digit numb
Or on remarque que
based on this formula. Each of the four sub-products e, f , g, h is computed recursively. The
notminvolve
(10 any multiplications,
a + b)(10 m
c + d) = 10however;
2m to m
ac + 10 multiply
(bc + by a power
ad) + bd of ten, we just shift the
in the right number of zeros.

MULTIPLY(x, y, n):
if n = 1
return x · y
else
m dn/2e
a bx/10m c; b x mod 10m
d b y/10m c; c y mod 10m
e MULTIPLY(a, c, m)
f MULTIPLY(b, d, m)
g MULTIPLY(b, c, m)
h MULTIPLY(a, d, m)
return 102m e + 10m (g + h) + f
D’où un algorithme qui en découle :
You can easily prove by induction that this algorithm is correct. The running time for this
given by the recurrence
T (n) = 4T (dn/2e)T+ = 4T (dn/2e)
(n)O(n) et T (1) + O(n),
=1 T (1) = 1,
which solves to T (n) = O(n2 ) by the recursion tree method (after a simple domain tran
Hmm. . . I guess
d’où toujours un algorithme en this
O(ndidn’t
2 help !after all.
), ZUT
But there’s a trick, first published by Anatoliı̆ Karatsuba in 1962.5 We can comput
coefficient bc + ad using only one recursive multiplication, by exploiting yet another bit o
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 45 / 201
Diviser pour Régner Multiplications de nombres à n digits

Anatolii Karatsuba in 1962 (à la Gauss 1800) + Donald Knuth

Or on remarque que bc + ad = ac + bd − (a − b)(c − d), c’est à dire qu’on peut ne


calculer que trois produits :
(10m a + b)(10m c + d) = 102m ac + 10m (bc + ad) + bd
= 102m ac + 10m (ac + bd − (a − b)(c − d)) + bd

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 46 / 201
Diviser pour Régner Multiplications de nombres à n digits
mm. . . I guess this didn’t help after all.
But there’s a trick,
Algorithme de first published by Anatoliı̆ Karatsuba in 1962.5 We can compute the middle
Karatsuba
efficient bc + ad using only one recursive multiplication, by exploiting yet another bit of algebra:

ac + bd (a b)(c d) = bc + ad
m m 2m m
(10 a + b)(10 c + d) = 10 ac + 10 (ac + bd − (a − b)(c − d)) + bd
is trick lets us replace the last three lines in the previous algorithm as follows:

FASTMULTIPLY(x, y, n):
if n = 1
return x · y
else
m dn/2e
a bx/10m c; b x mod 10m
d b y/10m c; c y mod 10m
e FASTMULTIPLY(a, c, m)
f FASTMULTIPLY(b, d, m)
g FASTMULTIPLY(a b, c d, m)
return 102m e + 10m (e + f g) + f
5
However, the same basic trick was used non-recursively by Gauss in the 1800s to multiply complex numbers using only
ee real multiplications.
T (n) = 3T (dn/2e) + O(n) et T (1) = 1

9 2 3 ≈ 1.585 < 2.
cela donne un algorithme en O(nlog2 3 ), or log

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 47 / 201
Diviser pour Régner Multiplications de matrices n × n

Multiplications de matrices n × n

Problème 7 (Multiplications de matrices n × n)


Entrée : deux matrices carrées X et Y de dimension n
Sortie : X ∗ Y

C’est très bien expliqué dans


https://fr.wikipedia.org/wiki/Algorithme_de_Strassen.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 48 / 201
Diviser pour Régner Multiplications de matrices n × n

Par un produit habituel

On a alors T (n) = 8T (n/2) + Θ(n2 ), et donc T (n) ∈ O(nlog2 8 ) = O(n3 )

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 49 / 201
Diviser pour Régner Multiplications de matrices n × n

Par la méthode de Strassen

On a alors T (n) = 7T (n/2) + Θ(n2 ), et donc T (n) ∈ O(nlog2 7 ) ≈ O(n2,807 )

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 50 / 201
Diviser pour Régner Les deux points les plus rapprochés

Le problème des deux points les plus rapprochés

Preparata (Franco P.) and Shamos (Michael Ian). Computational Geometry : An


Introduction. Springer-Verlag, 1985.

Problème 8 (Les deux points les plus rapprochés)


Entrée : un tableau P de points dans le plan
Sortie : mina,b∈T ,a6=b d(a, b)

p
où d(a, b) = (a.x − b.x)2 + (a.y − b.y )2 , noté classiquement ka − bk2

Diviser pour Régner : on coupe le plan en deux et on calcule δ1 et δ2 pour les deux
sous-ensembles de points.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 51 / 201
soit atteinte pour un point de P1 et un point de P2 . Diviser pour Régner Les deux points les plus rapprochés
Soit = min( 1 , 2 ). On est amené à calculer la distance minimale entre les
δ = min{δ , δ }
points qui sont situés dans
1 une2 bande verticale centrée en ( ) et de largeur 2 .

P1 P01 P02 P2

Pour cherche
On se faire, il nelafautdistance
pas utiliser une approche naïve.
minimale entre L’astuce
deux consiste à
points distincts de la bande verticale
0
représenter
0 les 0points de
0 cette bande par un tableau P qui contient les points de
P = P
cette bande triés ∪ P .
1 par ordonnées
2 croissantes en se rendant compte que pour un
point a, il suffit de calculer les distances entre a et b où b est parmis les 7 points
qui succèdent a dans P0 .

Page 79
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 52 / 201
Diviser pour Régner Les deux points les plus rapprochés

Calcul efficace dans la bande P0

On trie les points par ordonnées croissantes et on montre que pour un point a, il suffit de
calculer les distances entre a et b où b est parmi les 7 points qui succèdent à a dans P 0 .
Si un point au dessus du point a est distant de moins de δ de a alors il est dans le
rectangle jaune de taille 2δ × δ.

Si un point est distant de moins de de a alors il est dans le rectangle jaune


de taille 2 ⇥ ci-dessus. Montrons à présent qu’il suffit de ne considérer que les
Lemme 14 (non démontré)
7 points suivants. Plus précisément, on montre que si les 7 points suivants sont
distants de plus de alors les points qui suivent ces 7 points ne ont pas dans ce
rectangle jaune
Au plus 8 points de P peuvent seet donc sont aussi àà
trouver unel’intérieur de a.ce rectangle 2δ × δ.
distance de plus de de
On montre qu’il ne peut avoir plus de 8 points dans ce rectangle fermé distants
les uns des autres d’au moins . Pour cela, on découpe ce rectangle en 8 petits
Ainsi, il suffit de tester acarrés
avec les ⇥7. Montrons
de taille autresqu’ilpoints
2 suivants
ne peut y avoir
2 pour
plus d’un point l’ordre d’ordonnées
dans un tel
carré. Par l’absurde, supposons qu’un tel carré contient deuxppoints. Comme la
croissantes. distance la plus longue du carré est la diagonale de longueur 2 < , ces deux 2
points seront distants de moins de . Contradiction. Comme chacun de ces carrés
contient au plus un point, le rectangle jaune contient au plus 8 points. Comme a
S. Pinchinat (IRISA, Université de Rennes est
1) déjà dans ce rectangle Méthodes
jaune, il ne reste plus que 7 autres points à considérer.
algorithmiques UE ALG – année 2019-2020 53 / 201
Diviser pour Régner Les deux points les plus rapprochés

L’idée est la suivante : on considère une droite verticale ( ) qui sépare notre
Algorithme plusRapproches(P)
Voicienl’algorithme
nuage de points deux parties P1 etprésenté entièrement.
P2 qui contiennent plus ou moins le même
nombre de points. On calcule récursivement la distance minimale 1 entre deux
Algorithme 26: plusRapproches(P)
points distincts de P1 et la distance minimale 2 entre deux points distincts de P2 .
Maintenant, Entrées : Un
il se peut que tableauminimale
la distance de points
entre P dupoints
deux plandistincts de T
soit atteinte pour un point de P1 et un point de P2 .
Sorties : La distance minimale, i.e. mina,b2T |a,b ||a b||2
Soit = min( 1 , 2 ). On est amené à calculer la distance minimale entre les
X :=
1 sont
points qui tri(P,
situés dans par abscisses
une bande verticalecroissantes)
centrée en ( ) et; de largeur 2 .
2 Y := tri(P, par ordonnées croissantes) ;
3 plusRapprochesRec(X, Y)

Algorithme 27: plusRapprochesRec(X, Y)


Entrées : Deux tableaux X, Y qui contiennent les même points, X est trié
par absisse croissante et Y est trié par ordonnée croissante
Sorties : La distance minimale, i.e. mina,b2X|a,b ||a b||2
1 si card(P)  3 alors 2

2 retourner méthode naïve


3 sinon 1

4 XG := X[1, b |X| 2
c]
5 XD := X[b |X| 2
c + 1, |X|]
6 x sep := XG [ |X| 2
].x
7 YG := extraire les éléments de Y d’abcsisse  x sep
8 YD := extraire
P1
les0 éléments de
P2
Y d’abcsisse > x sep
P1 P02
9 G := plusRapprochesRec(XG , YG )
10 D := plusRapprochesRec(XD , YD )
11 := min( G , D )
12
S. Pinchinat Y 0 :=Université
(IRISA, extrairede les éléments
Rennes 1) de Y qui sont dans
Méthodes la bande verticale
algorithmiques UE ALG – année 2019-2020 54 / 201
X := tri(P, par abscisses croissantes)
1 ;
Diviser pour Régner Les deux points les plus rapprochés

Y
2 := tri(P, par ordonnées
Algorithme plusRapprochesRec(X croissantes) ; ,Y)
3 plusRapprochesRec(X, Y)

Algorithme 27: plusRapprochesRec(X, Y)


Entrées : Deux tableaux X, Y qui contiennent les même points, X est trié
par absisse croissante et Y est trié par ordonnée croissante
Sorties : La distance minimale, i.e. mina,b2X|a,b ||a b||2
1 si card(P)  3 alors
2 retourner méthode naïve
3 sinon
4 XG := X[1, b |X| 2
c]
5 XD := X[b |X|2
c + 1, |X|]
6 x sep := XG [ |X|
2
].x
7 YG := extraire les éléments de Y d’abcsisse  x sep
8 YD := extraire les éléments de Y d’abcsisse > x sep
9 G := plusRapprochesRec(XG , YG )
10 D := plusRapprochesRec(XD , YD )
11 := min( G , D )
12 Y 0 := extraire les éléments de Y qui sont dans la bande verticale
d’absisse x sep et de largeur 2 ;
13 retourner min( , plusRapprochesBande(Y 0 , ))

Les fonctions non données ici sont laissés en exercice.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 55 / 201
Diviser pour Régner Les deux points les plus rapprochés

Complexité de l’algorithme plusRapproches(P)

T (n) = T (bn/2c) + T (dn/2e) + O(n)


T (3) = T (2) = T (1) = Θ(1)

cela donne un algorithme en O(nlogn).

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 56 / 201
Diviser pour Régner Les deux points les plus rapprochés

Retour sur le Théorème fondamental pour les complexités

Théorème 2.2
Si T (n) = aT (dn/be) + O(nd ) avec a > 0, b > 1, d ≥ 0, alors
d

 O(n ) si d > logb a
T (n) = O(nd logb n) si d = logb a
O(nlogb a ) si d < logb a

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 57 / 201
Diviser pour Régner Les deux points les plus rapprochés

Rappels sur les logarithmes

c logc m = m
logc mn = logc m + logc n
m
logc = logc m − logc n
n
logc mn = nlogc m
logs m
Changement de base : logc m =
logs c

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 58 / 201
Diviser pour Régner Les deux points les plus rapprochés

Rappels sur les séries

n
n(n + 1)
X
Série arithmétique : i=
.
i=1
2
 n+1
n  q −1
X i si q 6= 1
Série géométrique : q = q−1
i +1 si q = 1

i=0

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 59 / 201
Diviser pour Régner Les deux points les plus rapprochés

Complexités réductions simples 1/2

Réduction simple
T (n) = aT (n − 1) + cnk

a ≥ 1, c ≥ 1, k ≥ 0, d ≥ 0 sont des constantes.
T (1) = d

T (n) = aT (n − 1) + cnk
aT (n − 1) = a2 T (n − 2) + ca(n − 1)k
a2 T (n − 2) = a3 T (n − 3) + ca2 (n − 2)k
...
an−2 T (2) = an−1 T (1) + can−2 2k
an−1 T (1) = an−1 d

n−2
X
RS : T (n) = dan−1 + c ai (n − i)k
i=0

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 60 / 201
Diviser pour Régner Les deux points les plus rapprochés

Complexités réductions simples 2/2

n−2
X
RS : T (n) = dan−1 + c ai (n − i)k
i=0

Cas particuliers intéressants :

RS1 : k = 0, a = 1T (n) = d + c(n − 1) = O(n) [linéaire]


an−1 − 1
RS2 : k = 0, a > 1T (n) = dan−1 + c = O(an ) [exponentiel]
a−1
(n − 1)(n + 2)
RS3 : k = 1, a = 1T (n) = d + c = O(n2 ) [polynomial]
2

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 61 / 201
Diviser pour Régner Les deux points les plus rapprochés

Complexités réductions logarithmiques 1/2

Réduction logarithmique
T (n) = aT ( bn ) + cnk

a ≥ 1, b ≥ 2, c ≥ 1, k ≥ 0, d ≥ 0 sont des constantes.
T (1) = d

On suppose n = b m , donc m = logb n et am = alogb n = nlogb a

T (b m ) = aT (b m−1 ) + cb km
aT (b m−1 ) = a2 T (b m−2 ) + cab k(m−1)
...
am−1 T (b) = am T (1) + cam−1 b k
am T (1) = am d
b ki
= T (b m ) = dam + c m b = dam + cam m
m−i ki
P P
T (n) i=1 a i=1 ai

Lorsqu’on s’intéresse seulement à l’ordre de grandeur des complexités, on peut simplifier


la formule en posant d = c :

m
X b ki
RL : T (n) = cam
i=0
ai
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 62 / 201
Diviser pour Régner Les deux points les plus rapprochés

Complexités réductions logarithmiques 1/2

m
X b ki
RL : T (n) = cam
i=0
ai

bk
d’où 3 cas possibles en fonction de la valeur de q = a
:

m+1
q<1: T (n) = cam 1−q
1−q
= O(am ) = O(nlogb a )
q=1: T (n) = ca (m + 1) = O(mam ) = O(logb n nlogb a )
m
k
= O(logb n nlogb b ) = O(nk logb a)
m+1 km
q>1: T (n) = cam q q−1−1 = O(am q m ) = O(am bam ) = O(nk )

RL1 : a > b k T (n) = O(nlogb a ) [polynomial]


RL2 : a = b k T (n) = O(nk logb n) [polynomial]
RL3 : a < b k T (n) = O(nk ) [polynomial]

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 63 / 201
Diviser pour Régner Les deux points les plus rapprochés

Pratique ...

Exercice 2.6
Vérifier avec le théorème fondamental les résultats obtenus pour les systèmes d’équations
de :
Calcul du médian ou problème de sélection T (n) = T (n/2) + O(n), donc un
algorithme en ...
Multiplications de nombres à n digits : 1) T (n) = 4T (dn/2e) + O(n) et T (1) = 1
donc un algorithme en ...puis T (n) = 3T (dn/2e) + O(n) et T (1) = 1, un
algorithme en ...
Les deux points les plus rapprochés T (n) = T (bn/2c) + T (dn/2e) + O(n) et
T (3) = T (2) = T (1) = Θ(1) donc en ...
Multiplications de matrices n × n ...

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 64 / 201
Approches Gloutonnes

Table des Matières

1 Rappels : Fonctions et Ordres de grandeurs

2 Diviser pour Régner

3 Approches Gloutonnes
Le problème des activités
Principe des algorithmes gloutons
La satisfaisabilité des formules de Horn
Compression de données : arbre de Huffman
Le problème du Sac à dos/Knapsack Problem

4 Programmation Dynamique

5 Théorie de la NP-complétude

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 65 / 201
Approches Gloutonnes Le problème des activités

Le problème des activités

un ensemble d’activités a1 , . . . , an ;
ai commence à si et termine à fi (si < fi ).
Le problème est d’affecter une salle à chaque activité, en respectant la contrainte
que ”à un instant donné, il peut y avoir au plus une seule activité par salle” et en
minimisant le nombre de salles utilisées.
Rmq : Pas de temps de battement entre deux activités dans une même salle.
On considère une version plus abstraite du problème :

Définition 15 (Activités compatibles)


Les activités a et b sont compatibles si a commence après b ou b commence après a :
sa ≥ fb ou sb ≥ fa (a n’est pas compatible avec elle-même).

Problème 9 (Les activités)


Entrée : Un ensemble E = {a1 , . . . , an } de n activités, et des valeurs si ≤ fi
de début et de fin de chaque activité ai ∈ E .
Sortie : Un ensemble d’activités mutuellement compatibles de taille maxi-
male.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 66 / 201
Approches Gloutonnes Le problème des activités

Exemple du problème des activités

Un exemple où les activités sont numérotées par ordre croissant d’heure de fin.

Exemple 16

Le sous-ensemble {3, 9, 11} est solution, mais il n’est pas optimal


on a aussi {1, 4, 8, 11} ou encore {2, 4, 9, 11}.
Un critère intuitif pour sélectionner les activités : si on vient de choisir une activité a

1 on peut choisir parmi toutes les activités non encore sélectionnées et compatibles
avec a ;
2 en prenant celle qui se termine le plus tôt on se laisse plus de chance d’en placer
encore beaucoup après.

On conçoit un algorithme sur la base de cette intuition.


S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 67 / 201
Approches Gloutonnes Le problème des activités

Un algorithme glouton

On supposera que :
les activités sont numérotées a1 , a2 , ..., an .
on ajoute 2 activités “fictives” a0 avec s0 = f0 = 0 et an+1 avec sn+1 = fn+1 = ∞.
l’entrée de l’algorithme : deux tableaux s[0..n + 1] et f [0..n + 1] (heures de début et
de fin de chaque activité).
On suppose que f [0..n + 1] est trié en ordre croissant, comme dans notre exemple.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 68 / 201
Approches Gloutonnes Le problème des activités

Une solution gloutonne pour le problème des activités

Algorithm 1 Choix-D’activités-Glouton-Recursif(s, f , i, n)
Require: ai est la dernière activité sélectionnée
Sortie : un ensemble maximal d’activités compatibles parmi ai+1 , . . . , an
1: if i ≤ n then
2: m ←i +1
3: while m ≤ n et s[m] < f [i] do . am n’est pas compatible avec ai
4: m ←m+1
5: end while . m ≤ n + 1 car s[n + 1] = +∞ ≥ f [i]
6: . am est la première activité compatible avec ai
7: return {am } ∪ Choix-D’activités-Récursif(s, f , m, n)
8: else
9: return ∅
10: end if

Appel principal : Choix-D’activités-Récursif(s, f , 0, n) (a0 est déjà sélectionnée).

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 69 / 201
Approches Gloutonnes Principe des algorithmes gloutons

Principe des algorithmes gloutons

Construction incrémentale d’une solution pour une entrée E :



 un critère de sélection d’un morceau la solution en temps polynomial

ce choix est dit glouton car il n’est plus jamais remis en cause

 +
on complète la solution en résolvant le problème sur une unique entrée E 0 < E .

la méthode est intrinsèquement récursive terminale, donc elle se décrit aussi en itératif !

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 70 / 201
Approches Gloutonnes Principe des algorithmes gloutons

Algorithm 2 Choix-D’activités-Glouton-Recursif(s, f , i, n)
Require: ai est la dernière activité sélectionnée
Sortie : un ensemble maximal d’activités compatibles parmi ai+1 , . . . , an
1: if i ≤ n then
2: m ←i +1
3: while m ≤ n et s[m] < f [i] do . am n’est pas compatible avec ai
4: m ←m+1
5: end while . m ≤ n + 1 car s[n + 1] = +∞ ≥ f [i]
6: . am est la première activité compatible avec ai
7: return {am } ∪ Choix-D’activités-Récursif(s, f , m, n)
8: else
9: return ∅
10: end if

Remarque 3.1
L’algorithme Choix-D’activités-Récursif(s, f , i, n) est récursif terminal.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 71 / 201
Approches Gloutonnes Principe des algorithmes gloutons

Un algorithme itératif pour le problème des activités

Algorithm 3 Choix-D’activités-Iteratif(s, f , i)
Require: ai est la dernière activité sélectionnée
Sortie : un ensemble maximal d’activités compatibles parmi ai+1 , . . . , an
1: n ← longueur[s] . n est le nombre d’activités
2: A ← {ai } . on sélectionne a0 (qui se termine le plus tôt)
3: for m ← i + 1 to n + 1 do . am est l’activité en cours de traitement
4: if s[m] ≥ f [i] then . am est compatible avec ai
5: A ← A ∪ {am } . et c’est celle qui se termine le plus tôt
6: i ←m . ai est la dernière activité sélectionnée
7: end if
8: end for
9: return A \ {ai , an+1 }

Exercice 3.1
Montrer que pour toutes tables s, f et tout 0 ≤ i ≤ n on a

Choix-D’activités-Récursif(s, f , i, n) = Choix-D’activités-Iteratif(s, f , i)
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 72 / 201
Approches Gloutonnes Principe des algorithmes gloutons

Argument de correction d’un algorithme glouton

Il faut justifier le choix glouton

Il y a deux points de vue qui se valent.

soit on montre qu’il existe une solution (optimale) du problème initial qui repose
notre première sélection ;
soit on déforme une solution optimale en une autre solution optimale plus proche de
celle retournée par l’algorithme glouton. Autrement dit en une solution (optimale)
qui repose sur notre sélection.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 73 / 201
Approches Gloutonnes Principe des algorithmes gloutons

Correction de Choix-D’activités-Récursif(s, f , 0, n)

Algorithm 4 Choix-D’activités-Glouton-Recursif(s, f , i, n)
Require: ai est la dernière activité sélectionnée
Sortie : un ensemble maximal d’activités compatibles parmi ai+1 , . . . , an
1: if i ≤ n then
2: m ←i +1
3: while m ≤ n et s[m] < f [i] do . am n’est pas compatible avec ai
4: m ←m+1
5: end while . m ≤ n + 1 car s[n + 1] = +∞ ≥ f [i]
6: . am est la première activité compatible avec ai
7: return {am } ∪ Choix-D’activités-Récursif(s, f , m, n)
8: else
9: return ∅
10: end if

Théorème 3.1
Choix-D’activités-Récursif(s, f , 0, n) termine ;
La sélection de am (la boucle en lignes 3-5) prend un temps polynomial ;
L’algorithme Choix-D’activités-Récursif(s, f , 0, n) est optimal.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 74 / 201
Approches Gloutonnes Principe des algorithmes gloutons

Choix-D’activités-Glouton-Recursif(s, f , i, n) est optimal

On montre qu’il existe une solution optimale pour le problème de trouver un ensemble
maximal d’activités compatibles parmi ai+1 , . . . , an qui contientr notre choix glouton,
c-à-d. l’activité am .

Soit A∗ = {ak , . . .} (dans l’ordre croissant des dates de fin) une solution optimale de ce
problème.
Dans l’algorithme Choix-D’activités-Glouton-Recursif(s, f , i, n), le choix de am
est tel que fk ≥ fm .
Donc toutes les activités de A∗ , autres que ak , sont compatibles avec am , on peut donc
remplacer ak par am et obtenir une nouvelle solution.
Or l’ensemble (A∗ \ {ak }) ∪ {am } est de même cardinal que A∗ , est c’est une solution
optimale.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 75 / 201
Approches Gloutonnes La satisfaisabilité des formules de Horn

La satisfaisabilité des formules de Horn

Rappels : Propositions : p, q, r , . . ., les clauses : p ∨ ¬q, ¬r ∨ ¬q, ¬r ∨ p ∨ q.


“Si un animal vole et pond des oeufs alors c’est un oiseau”
se formalise en (vole ∧ pond → oiseau) ∧ ((vole ∧ grand) → albatros)
ou encore par l’ensemble de clauses
{¬vole ∨ ¬pond ∨ oiseau, ¬vole ∨ ¬grand ∨ albatros}.

Définition 17
Une clause de Horn est une clause contenant au plus un litéral positif.
Celles sans aucun littéral positif sont dites négative pures, les autres sont des implications.

Exemple 18
p ∨ ¬q et ¬r ∨ ¬q sont des clauses de Horn, la deuxième est négative pure, mais ¬r ∨ p ∨ q
n’est pas une clause de Horn.
La valuation ν telle que ν(p) = ν(q) = ν(r ) = 0 satisfait à la fois p ∨ ¬q et ¬r ∨ ¬q.

Problème 10 (Horn-SAT)
Entrée : Un ensemble fini de clauses de Horn
Sortie : Si elle existe, une valuation modèle de cet ensemble
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 76 / 201
Approches Gloutonnes La satisfaisabilité des formules de Horn

Exemple d’une entrée de Horn-SAT

Exemple 19
On se donne des énoncés de base :
x pour “le meurtre a eu lieu dans la cuisine”
y pour “le majordome est innocent”
z pour “ le colonnel dormait à 20h00”
w pour “le meurtre a eu lieu à 20h00”
u pour “ le colonnel est innocent”, v pour “
On pourra écrire des clauses telles que :
des faits :> → x pour “c’est la cas que le meutre a eu lieu dans la cuisine” ;
des inférences : (z ∧ w ) → u ;
des affirmations :(¬u ∨ ¬v ∨ ¬y ) pour “le coupable est parmi eux”.

On considère l’ensemble de clauses

(w ∧ y ∧ z) → x, (x ∧ z) → w , x → y , > → x, (x ∧ y ) → w , (¬w ∨ ¬x ∨ ¬y ), (¬z)

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 77 / 201
Approches Gloutonnes La satisfaisabilité des formules de Horn

Un algorithme glouton pour les clauses de Horn

Voir [?] “Algorithms” par Dasgupta/Papadimitriou/Vazirani

Algorithm 5 Horn-SAT-Glouton(C)
Soit Prop l’ensemble des propositions des clauses de C
Soit I ⊆ C l’ensemble des implications
Soit N ⊆ C l’ensemble des négatives pures
1: for all p ∈ Prop do
2: ν(p) ← false . Initialiser toutes les variables à faux
3: end for
4: while il existe une implication C ∈ I avec ν(C ) = false do
5: Choisir C ∈ I tq ν(C ) = false de la forme C = . . . → p
6: ν(p) ← true . modifier ν(p)
7: end while
8: if pour chaque C ∈ N , ν(C ) = true then
9: return la valuation ν
10: else
11: return “la formule n’est pas satisfaisable”
12: end if

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 78 / 201
Approches Gloutonnes La satisfaisabilité des formules de Horn

Correction de l’algorithme Horn-SAT-Glouton

Algorithm 6 Horn-SAT-Glouton(C)
Soit Prop l’ensemble des propositions des clauses de C
Soit I ⊆ C l’ensemble des implications
Soit N ⊆ C l’ensemble des négatives pures
1: for all p ∈ Prop do
2: ν(p) ← false . Initialiser toutes les variables à faux
3: end for
4: while il existe une implication C ∈ I avec ν(C ) = false
do
5: Choisir C ∈ I tq ν(C ) = false de la forme C = . . . →
p
6: ν(p) ← true . modifier ν(p)
7: end while
8: if pour chaque C ∈ N , ν(C ) = true then
9: return la valuation ν
10: else
11: return “la formule n’est pas satisfaisable”
12: end if

L’algorithm Horn-SAT-Glouton termine : à chaque étape on diminue le nombre


d’implications non satisfaites.
L’algorithme Horn-SAT-Glouton s’exécute en temps linéaire dans la taille de
l’entrée (i.e., le nombre d’occurrences de littéraux)
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 79 / 201
Approches Gloutonnes La satisfaisabilité des formules de Horn

Correction de l’algorithme Horn-SAT-Glouton

Algorithm 7 Horn-SAT-Glouton(C)
Soit Prop l’ensemble des propositions des clauses de C
Soit I ⊆ C l’ensemble des implications
Soit N ⊆ C l’ensemble des négatives pures
1: for all p ∈ Prop do
2: ν(p) ← false . Initialiser toutes les variables à faux
3: end for
4: while il existe une implication C ∈ I avec ν(C ) = false do
5: Choisir C ∈ I tq ν(C ) = false de la forme C = . . . → p
6: ν(p) ← true . modifier ν(p)
7: end while
8: if pour chaque C ∈ N , ν(C ) = true then
9: return la valuation ν
10: else
11: return “la formule n’est pas satisfaisable”
12: end if

Si l’algorithme retourne une valuation, cette valuation satisfait à la fois les


implications et les clauses négatives pures, c’est donc bien une solution.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 80 / 201
Approches Gloutonnes La satisfaisabilité des formules de Horn

Correction de l’algorithme Horn-SAT-Glouton

Si l’algorithme répond “la formule n’est pas satisfaisable”, on établit un invariant.

Algorithm 8 Horn-SAT-Glouton(C)
Lemme 20
Soit Prop l’ensemble des propositions des clauses de C
Soit I ⊆ C l’ensemble des implications La propriété “Si une variable est
Soit N ⊆ C l’ensemble des négatives pures
mise à vrai alors elle vaut vrai dans
1: for all p ∈ Prop do
2: ν(p) ← false . Initialiser toutes les variables à faux toute valuation solution” est un
3: end for invariant de la boucle While en
4: while il existe une implication C ∈ I avec ν(C ) = false do
5: Choisir C ∈ I tq ν(C ) = false de la forme C = . . . → p ligne 7 de l’agorithme
6: ν(p) ← true . modifier ν(p) Horn-SAT-Glouton.
7: end while
8: if pour chaque C ∈ N , ν(C ) = true then
9: return la valuation ν Exercice 3.2
10: else
11: return “la formule n’est pas satisfaisable” Établir cet invariant.
12: end if

Donc si la valuation trouvée à la ligne 7 ne satisfait pas une des clauses négatives pures,
il ne peut y avoir de valuation qui satisfait l’ensemble des clauses.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 81 / 201
Approches Gloutonnes La satisfaisabilité des formules de Horn

Intérêt pratique des clauses de Horn

On rappelle que :

Proposition 3.1
L’Algorithme Horn-SAT-Glouton(C) a une complexité linéaire en la taille de l’entrée.

Remarque 3.2
Les clauses de Horn sont au coeur de Prolog (“programming by logic”), un langage dans
lequel on programme les propriétés attendues en utilisant des expression logiques simples.
Le cheval de bataille des interpreteurs Prolog est notre algorithme glouton.

Exercice 3.3
Informez-vous un minimum sur Prolog.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 82 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Codage de Huffman

Problème 11 (Codage de Huffman)


Entrée : Un texte dont on connait l’alphabet fini des symboles, et pour
chaque symbole son nombre d’occurrences dans le texte
Sortie : Un encodage qui minimise la longueur du code du texte

Exemple 21
On veut stocker un texte (une chaine de caratères) qui contient les symboles “A,B,C,D”.
Lettre Encodage
A 00
B 01 AABBCBCBDD 0000010110011001000011
C 10
D 11
Pour un texte tel que

Lettre Nbre d’occurrences On aura besoin de 70 ∗ 2 + 3 ∗ 2 + 20 ∗ 2 + 31 ∗ 2 = 248


A 70 millions millions de bits pour stocker.
B 3 millions
C 20 millions Peut-on faire mieux ?
D 37 millions
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 83 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Tous les codages ne marchent pas !

Exemple 22
Lettre Encodage
A 0
B 001
C 01
D 11
Comment décoder 001 ?
Cela pourrait être autant le texte “B” que le texte “AC”.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 84 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Notion d’arbre préfixe et codage induit

Exemple 23

lettre fréquence
A 70
B 3
C 20
D 37

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 85 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Notion d’arbre préfixe et codage induit

Exemple 23
({A, B, C , D}, 130)

lettre fréquence
({B, C , D}, 60) ({A}, 70)
A 70
B 3
C 20 ({B, C }, 23) ({D}, 37)
D 37

({B}, 3) ({C }, 20)

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 85 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Notion d’arbre préfixe et codage induit

Exemple 23
({A, B, C , D}, 130)

lettre fréquence
({B, C , D}, 60) ({A}, 70)
A 70
B 3
C 20 ({B, C }, 23) ({D}, 37)
D 37

({B}, 3) ({C }, 20)

(meta-)lettre fréquence Codage


{A,B,C,D} 130 -
{A} 70 1
{B,C,D} 60 0
{D} 37 01
{B,C} 23 00
{C} 20 001
{B} 3 000
Le codage est le chemin dans l’arbre pour atteindre la (meta-)lettre.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 85 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Principe de l’algorithme de Huffman

Soit un texte à compresser de lettres {a1 , . . . , an } chacune codée sur un octet, et on


dispose d’un tableau freq[1..N] où freq[i] > 0 est la fréquence de la lettre ai dans le texte.
Pour chaque lettre ai , on crée un arbre feuille d’étiquette (ai , freq[ai ]).
On itère :
1 Classer chaque arbre par frequence croissante ;
2 Retirer de la liste les deux arbres ayant les fréquences les plus faibles. Insérer, à la
place, un nouvel arbre dont la racine pointe sur les racines des deux arbres retirés.
Affecter à ce nouvel arbre binaire le couple (A, freq[A]) où A la “meta-lettre”
obtenue comme l’union des meta-lettres de chacun des arbres retirés et freq[A] est la
fréquence somme des fréquences des deux arbres retirés.
3 Recommencer en 1. jusqu’à ce qu’il ne reste plus qu’un unique arbre.
On construit ainsi un arbre binaire dans lequel les feuilles sont les (ai , freq[ai ]).

Le Code de Huffman pour la lettre ai est son adresse dans l’arbre obtenu : ”0” pour
gauche, et ”1” pour droite.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 86 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Principe plus détaillé de l’algorithme

({A, B, C , D}, 130)

({B, C , D}, 60) ({A}, 70)

({B, C }, 23) ({D}, 37)

({B}, 3) ({C }, 20)

La construction d’un arbre préfixe fonctionne de la manière suivante :


On commence avec une forêt d’arbres triviaux à un noeud pour chaque lettre ` de
l’alphabet A du texte.

Tant que la forêt a au moins deux arbres, itérer : on récupère les deux arbres T1 (de
fréquence f1 ) et T2 (de fréquence f2 ) de fréquences minimales et on les colle
ensemble pour obtenir un arbre T = T1 ⊕ T2 (de fréquence f1 + f2 ).

Lorsque l’algorithme s’arrête, la forêt ne contient plus qu’un seul arbre qui est l’arbre
préfixe que l’on utilise pour coder les lettres du texte.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 87 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Algorithme de codage

On utilise une file de priorité F (pour “forêt”) qui contient des arbres ordonnés par la
fréquence de leur racine.
Initialement, on part de la forêt F0 formée des arbres préfixes à un noeud correspondant
à un alphabet {`} à une lettre et de fréquence freq[`]. Alors Card(F0 ) est le cardinal de
l’alphabet.
On appelle alors Huffman(F0 ), où :

Algorithm 9 Fonction Huffman(F)


1: if Card(F) = 1 then return l’unique arbre de F
2: else
3: T1 ← F .defilerMin . un arbre dont la racine a une fréquence minimale
4: T2 ← F .defilerMin . un arbre dont la racine a une fréquence 2ème minimale
5: T ← T1 ⊕ T2 . l’arbre dont le fils gauche est T1 et le fils droit est T2
6: freq[T ] ← freq[T1 ] + freq[T2 ] . à la racine de T on a la meta-lettre union des
meta-lettres de T1 et de T2 .
7: F.enfiler (T )
8: return Huffman(F)
9: end if

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 88 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Coût c(T ) d’un arbre préfixe T

La profondeur d’une lettre est la longueur


({A, B, C , D}, 130)
de son code. Le codage est directement
issu de la construction de l’arbre préfixe.
({B, C , D}, 60) ({A}, 70)
Lettre Encodage Profondeur dans l’arbre
A 1 1
({B, C }, 23) ({D}, 37)
D 01 2
({B}, 3) ({C }, 20)
B 000 3
C 001 3
L’efficacité d’un arbre est la longueur total du texte encodé, ce qu’on cherche à
minimiser :
Définition 24
Soit A l’alphabet du texte, et T un arbre préfixe où pour chaque lettre ` ∈ A, on note p`
sa profondeur dans T . 
freq[`] si A = {`}
Le coût de T est c(T ) = P
`∈A freq[`] × p` sinon

Exemple 25
Pour l’arbre préfixe T en haut, on a c(T ) = 70 + 3 × 3 + 20 × 3 + 37 × 2.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 89 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Terminaison de l’algorithme Huffman(F)

Algorithm 10 Fonction Huffman(F)


1: if Card(F) = 1 then return l’unique arbre de F
2: else
3: T1 ← F .defilerMin . un arbre dont la racine a une fréquence minimale
4: T2 ← F .defilerMin . un arbre dont la racine a une fréquence 2ème minimale
5: T ← T1 ⊕ T2 . l’arbre dont le fils gauche est T1 et le fils droit est T2
6: freq[T ] ← freq[T1 ] + freq[T2 ] . à la racine de T on a la meta-lettre union des
meta-lettres de T1 et de T2 .
7: F.enfiler (T )
8: return Huffman(F)
9: end if

L’algorithme Huffman(F) termine car dans l’appel récursif la forêt a un cardinal


strictement plus petit.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 90 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Correction de l’algorithme Huffman(F)

Théorème 3.2
L’algorithme Huffman(F) retourne un arbre de coût minimal.

Preuve : on procède par récurrence sur n = Card(F), le cardinal de F.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 91 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Correction de l’algorithme Huffman(F) avec Card(F) = 1

Algorithm 11 Fonction Huffman(F)


1: if Card(F) = 1 then return l’unique arbre de F
2: else
3: T1 ← F .defilerMin . un arbre dont la racine a une fréquence minimale
4: T2 ← F .defilerMin . un arbre dont la racine a une fréquence 2ème minimale
5: T ← T1 ⊕ T2 . l’arbre dont le fils gauche est T1 et le fils droit est T2
6: freq[T ] ← freq[T1 ] + freq[T2 ] . à la racine de T on a la meta-lettre union des
meta-lettres de T1 et de T2 .
7: F.enfiler (T )
8: return Huffman(F)
9: end if

Si Card(F) = 1 : il n’y a donc qu’un seul arbre dans la forêt F.


À l’appel initial de Huffman(F0 ), si Card(F0 ) = 1, alors le texte ne contient qu’une
lettre {`} et l’algorithme Huffman(F) retourne {l}.
Par définition, c(T ) = freq[`] donc la longueur du texte `` . . . `.

Ainsi c(T ) est minimal car on ne peut pas faire mieux.


S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 92 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Correction de l’algorithme Huffman(F) avec Card(F) ≥ 2

Théorème 3.3
L’algorithme Huffman(F) retourne un arbre de coût minimal.

Algorithm 12 Fonction Huffman(F)


1: if Card(F) = 1 then return l’unique arbre de F
2: else
3: T1 ← F .defilerMin . un arbre dont la racine a une fréquence minimale
4: T2 ← F .defilerMin . un arbre dont la racine a une fréquence 2ème minimale
5: T ← T1 ⊕ T2 . l’arbre dont le fils gauche est T1 et le fils droit est T2
6: freq[T ] ← freq[T1 ] + freq[T2 ] . à la racine de T on a la meta-lettre union des
meta-lettres de T1 et de T2 .
7: F.enfiler (T )
8: return Huffman(F)
9: end if

Si Card(F) = n ≥ 2 : on suppose le Théorème 3.3 vrai pour un alphabet à n − 1 lettres.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 93 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Algorithm 13 Fonction Huffman(F)


1: if Card(F) = 1 then return l’unique arbre de F
2: else
3: T1 ← F .defilerMin . un arbre dont la racine a une fréquence minimale
4: T2 ← F .defilerMin . un arbre dont la racine a une fréquence 2ème minimale
5: T ← T1 ⊕ T2 . l’arbre dont le fils gauche est T1 et le fils droit est T2
6: freq[T ] ← freq[T1 ] + freq[T2 ] . à la racine de T on a la meta-lettre union des
meta-lettres de T1 et de T2 .
7: F.enfiler (T )
8: return Huffman(F)
9: end if

À l’appel Huffman(F), avec les lignes 5 et 6, on remplace la file F par la file F 0 obtenue
en joignant les arbres T1 et T2 , donc Card(F 0 ) = n − 1.
Par hypothèse de récurrence, Huffman(F 0 ) retourne un arbre optimal T 0∗ , où le
sous-arbre T est considéré comme une feuille.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 94 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

suite preuve

T 0∗ = Huffman(F 0 ) est optimal (avec T comme feuille, de fréquence f = f1 + f2 ).


Soit l’arbre T 0 obtenu à partir T 0∗ dans lequel le noeud T a maintenant les deux feuilles
T1 et T2 et supposons T 0 non optimal. Il existe donc un arbre T 00 optimal et
c(T 00 ) < c(T 0 ).

Lemme 26
Tout arbre optimal T 00 (contenant les feuille T1 et T2 ) peut être transformé en un arbre
c00 tel que les meta-lettres de fréquences minimales sont soeurs et de profondeur
optimal T
maximale.
En effet, on prend X et Y deux feuilles soeurs de profondeur maximale pmax dans T 00 et
on les échange avec les feuilles X et Y avec T1 et T2 (de profondeurs p1 et p2 dans T 00 ,
c00 obtenu est tel que :
resp.). Alors l’arbre T
c00 ) =
c(T c(T 00 )−freq[X ] × pmax + freq[X ] × p1 −freq[Y ] × pmax +freq[Y ] × p2
−freq[T1 ] × p1 +freq[T1 ] × pmax −freq[T2 ] × p2 +freq[T2 ] × pmax
= c(T 00 )
−[(freq[X ] − freq[T1 ]) × (pmax − p1 ) + (freq[Y ] − freq[T2 ]) × (pmax − p2 )]
≤ c(T 00 )
car (freq[X ] − freq[T1 ])(pmax − p1 ) + (freq[Y ] − freq[T2 ])(pmax − p2 ) ≥ 0.
c00 est donc optimal si T 00 l’est.
T
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 95 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

suite preuve

T 0∗ = Huffman(F 0 ) est optimal (avec T comme feuille, de fréquence f = f1 + f2 ).


Soit l’arbre T 0 obtenu à partir T 0∗ dans lequel le noeud T a maintenant les deux feuilles
T1 et T2 et supposons T 0 non optimal. Il existe donc un arbre T 00 optimal et
c(T 00 ) < c(T 0 ).

Lemme 26
Tout arbre optimal T 00 (contenant les feuille T1 et T2 ) peut être transformé en un arbre
c00 tel que les meta-lettres de fréquences minimales sont soeurs et de profondeur
optimal T
maximale.
S. Dasgupta,
D’après le Lemme 26 peut supposer que T1C.H.
et TPapadimitriou, and U.V.
2 sont des feuilles Vazirani
soeurs dans T 00 .

f00 obtenu à partir de T 00


Considérons alors l’arbre T
en remplaçant le sous-arbre de feuilles T1 et T2 (de
fréquences respectives f1 et f2 ) par la feuille T de f1 + f2
fréquence f1 + f2 . f5 f4 f3

f1 f2
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 95 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

suite preuve

T 0∗ = Huffman(F 0 ) est optimal (avec T comme feuille, de fréquence f = f1 + f2 ).


Soit l’arbre T 0 obtenu à partir T 0∗ dans lequel le noeud T a maintenant les deux feuilles
T1 et T2 et supposons T 0 non optimal. Il existe donc un arbre T 00 optimal et
c(T 00 ) < c(T 0 ).
S. Dasgupta,
D’après le Lemme 26 peut supposer que T1C.H.
et TPapadimitriou, and U.V.
2 sont des feuilles Vazirani
soeurs dans T 00 .

f00 obtenu à partir de T 00


Considérons alors l’arbre T
en remplaçant le sous-arbre de feuilles T1 et T2 (de
fréquences respectives f1 et f2 ) par la feuille T de f1 + f2
fréquence f1 + f2 . f5 f4 f3

f1 f2

Alors f00 ) = c(T 00 ) − (c(T1 ) + c(T2 )) (voir Définition 24 du coût)


c(T The latter problem is just a smaller version of the one we started
< c(T 0 ) − (c(Toff
1 )the list 2of))frequencies, insert
+ c(T 00
) < c(T 0 )
1 + f2 ), and loop. The resulting a
car(fc(T
= c(T 0∗ ) in terms of priority queue operations (as defined on page 120) and
Ainsi T ne serait pas de coût binary
0∗ heap
minimal, ce(Section 4.5.2) issa
qui contredit used.
définition.
Donc T 0 est optimal, ce qui prouve la propriété au rang n.
procedure Huffman(f )
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 95 / 201
Approches Gloutonnes Compression de données : arbre de Huffman

Applications du codage de Huffman

Le codage de Huffman apparait pratiquement partout :


dans les algorithmes de compression gzip, pkzip, winzip, bzip2 ;
pour les images compressées jpeg, png ;
pour l’audio compressée mp3.
même l’algorithme de compression de Google Brotli (fin 2014) l’utilise...

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 96 / 201
Approches Gloutonnes Le problème du Sac à dos/Knapsack Problem

Le problème du Sac à dos (fractionnaire)/Knapsack (Fractional) Problem

Problème 12 (Knapsack Problem (kp))


Entrée : n objets, pour chaque objet i deux valeurs wi (≥ 0 son poids) et
pi (son profit/sa valeur), une constante K ≥ 0
Sortie : Des valeurs x1 , x2 , . . . , xn dans {0, 1} telles que Σni=1 wi .xi ≤ K et
qui maximise le profit Σni=1 pi .xi .

Exercice 3.4
On cherche à maximiser 20.x1 + 16.x2 + 11.x3 + 9.x4 + 7.x5 + x6
avec la contrainte 9.x1 + 8.x2 + 6.x3 + 5.x4 + 4.x5 + x6 ≤ 12
et que les xi s valent soit 0 soit 1.
Combien y a-t-il d’objets ? Quels sont les poids et valeurs de ces objets ?

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 97 / 201
Approches Gloutonnes Le problème du Sac à dos/Knapsack Problem

Une variante de (kp)

Problème 13 (Knapsack Fractional Problem (kfp))


Entrée : n objets, pour chaque objet i deux valeurs wi (≥ 0 son poids) et
pi (son profit/sa valeur), une constante K ≥ 0
Sortie : Une valeur dans [0, 1] pour les variables x1 , x2 , . . . , xn telle que
Σni=1 wi .xi ≤ K et qui maximise le profit Σni=1 pi .xi .

Définition 26
On dit que (kfp) est une relaxation de (kp), car les variables peuvent prendre des valeurs
non entières.

Une approche naturelle pour résoudre ce (kfp) :


Le voleur prend d’abord tout l’or, puis tout l’argent et finit de remplir son sac
avec le bronze qui peut encore y entrer. Il ne lui viendrait pas à l’idée de prendre
moins d’or pour le remplacer par quelque chose de valeur moindre.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 98 / 201
Approches Gloutonnes Le problème du Sac à dos/Knapsack Problem

Un algorithme glouton pour Knapsack Fractional Problem

Quitte à les trier, on suppose que les objets 1, . . . , n sont numérotés selon le meilleur
rapport profit/poids, c-à-d. wp11 ≥ wp22 ≥ . . . wpnn . On décrit un algorithme qui est basé sur

notre approche “naturelle”, où Glouton-KFP(i, k) résoud le sous-problème :


Entrée : les objets de i à n et k ≥ 0 le poids restant dans le sac à dos
Sortie : Une valeur des variables xi , . . . , xn telle que Σnj=i wj .xj ≤ k et qui
maximise le profit Σnj=i pj .xj .

Algorithm 14 Glouton-KFP(i, k)
1: if wi ≤ k then
2: xi ← 1
3: Glouton-KFP(i + 1, k − wi ) . appel du sous-problème
4: else
5: xi ← k/wi . on prend la proportion qui finit de remplir le sac
6: x[i + 1 . . . n] ← 0 . on met tout ce qui reste à 0
7: end if

Pour résoudre le problème initial, on appelle Glouton-KFP(1, K ).

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 99 / 201
Approches Gloutonnes Le problème du Sac à dos/Knapsack Problem

Correction de l’algorithme “GreedyKFP”

Algorithm 15 Glouton-KFP(i, k)
1: if wi ≤ k then
2: xi ← 1
3: Glouton-KFP(i + 1, k − wi ) . appel du sous-problème
4: else
5: xi ← k/wi . on prend la proportion qui finit de remplir le sac
6: x[i + 1 . . . n] ← 0 . on met tout ce qui reste à 0
7: end if

On établit que :
1. notre premier choix glouton x1 est inclus dans une solution optimale,
2. une solution optimale commençant par x1 contient une solution optimale du KFP
pour les objets {2, . . . , n} et la constante K − w1 .x1 .

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 100 / 201
Approches Gloutonnes Le problème du Sac à dos/Knapsack Problem

Le choix glouton x1 est inclus dans une solution optimale

Soit O = (y1 , y2 , . . . , yn ) une solution optimale du problème KFP, et soit


G = (x1 , x2 , . . . , xn ) une solution de Glouton-KFP(1, K ).
Clairement x1 ≥ y1 car le choix glouton sélectionne une quantité maximum de l’objet
de valeur maximum.
Si y1 = x1 , alors on a fait dans G le même premier choix que pour la solution
optimale O.
sinon (x1 > y1 ), mais alors le poids de la solution O est :
n
X
w (O) = wi .yi ≤ K
i=1

mais aussi
n
X
w (O) = w1 .x1 + wi .yi − w1 .(x1 − y1 )
i=1

On modifie alors O en la solution O 0 obtenue en prélevant un poids de w1 .(x1 − y1 )


en partant des objets les moins précieux, que l’on rajoute en quantité de l’objet 1.
O 0 = (x1 , z2 , . . . , zn ) est une solution puisque w (O 0 ) = w (O) ≤ K , et elle est aussi
bonne que O, i.e., p(O 0 ) ≥ p(O), puisque l’objet 1 est plus précieux que les autres.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 101 / 201
Approches Gloutonnes Le problème du Sac à dos/Knapsack Problem

Si O0= (x1 , z2 , . . . , zn ) est une solution optimale de KFP alors (z2 , . . . , zn )


est une solution optimale pour le sous-problème sur les objets {2, . . . , n}
avec la borne K − w1 .x1 .

On rappelle que O 0 est obtenue en prélevant un poids de w1 .(x1 − y1 ) en partant des


objets les moins précieux, que l’on rajoute en quantité de l’objet 1.
On note KFP(1) le sous-problème sur les objets {2, . . . , n} avec la borne K − w1 .x1 , et
on notera naturellement KFP(0) notre problème initial.
(z2 , . . . , zn ) est une solution de KFP(1) car

w ((z2 , . . . , zn )) = w (O 0 ) − w1 .x1 ≤ K − w1 .x1

Supposons (z2 , . . . , zn ) non-optimale. Alors il existe O 00 = (t2 , . . . , tn ) une solution


de KFP(1) telle que p(O 00 ) > p((z2 , . . . , zn )), mais alors la solution (x1 , t2 , . . . , tn )
est une solution de KFP(0) telle que p((x1 , t2 , . . . , tn )) > p(O 0 ), ce qui contredit
l’optimalité de O 0 .

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 102 / 201
Approches Gloutonnes Le problème du Sac à dos/Knapsack Problem

En récapitulant pour KFP

Après le choix glouton x1 pour KFP(0), on est ramené à résoudre optimalement le


sous-problème problème KFP(1) analogue au problème d’origine ;

pour KFP(1) il existe une solution optimale qui fait le choix x2 et on doit ensuite
résoudre le sous-problème KFP(2), celui sur les objets {3, . . . , n} avec la borne
K − x1 w1 − x2 w2 ;

et ainsi de suite, prouvant ainsi que la solution gloutonne est elle-même optimale.

De manière générale, l’optimalité d’un glouton s’établit en montrant :

1 qu’à chaque étape, il existe une solution optimale qui contient notre choix glouton,
c’est la propriété du “choix glouton”.
2 que toute solution optimale repose sur des solutions optimales de sous-problèmes,
c’est la propriété de “sous-structure optimale”.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 103 / 201
Approches Gloutonnes Le problème du Sac à dos/Knapsack Problem

Version itérative de l’algorithme glouton pour KFP

Exercice 3.5
Puisque Glouton-KFP(i, k) est récursif terminal, écrire une version itérative de
Glouton-KFP(1, K ).

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 104 / 201
Approches Gloutonnes Le problème du Sac à dos/Knapsack Problem

Knapsack Problem non fractionnaire

On se pose naturellement la question d’exploiter le principe de Glouton-KFP pour


résoudre le problem KP, et en particulier en ne gardant que les items “pleins”.
On obtient alors l’algorithme :

Algorithm 16 Glouton-KP(i, k)
1: if wi ≤ k then
2: xi ← 1
3: Glouton-KP(i + 1, k − wi ) . appel du sous-problème
4: else
5: xi ← 0
6: Glouton-KP(i + 1, k) . appel du sous-problème
7: end if

Exercice 3.6
L’algorithme Glouton-KP(1, K ) est-il correct, c-à-d. retourne-t-il une solution optimale ?

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 105 / 201
Approches Gloutonnes Le problème du Sac à dos/Knapsack Problem

Non, l’algorithme Glouton-KP(1, K ) n’est pas correct !

Exemple 27
On cherche à maximmiser 20.x1 + 16.x2 + 11.x3 + 9.x4 + 7.x5 + x6

9.x1 + 8.x2 + 6.x3 + 5.x4 + 4.x5 + x6 ≤ 12
avec les contraintes
xi ∈ {0, 1} pour i = 1, . . . , 6

En appliquant Glouton-KP(1, K ) à w = [9, 8, 6, 5, 4, 1], p = [20, 16, 11, 9, 7, 1], K = 12,


on obtient successivement :
0 k = 12
1 x1 = 1 et k = 3
2 x2 = 0 et k = 3, puis . . . puis x5 = 0 et k = 3
3 x6 = 1 et k = 2.
À la fin de l’algorithme k = 2, le sac n’est pas plein, et la solution (1, 0, 0, 0, 0, 1) calculée
à la valeur 21.
Or il existe une meilleure solution : la valeur de (0, 1, 0, 0, 1, 0) et z = 23
(et le sac est plein).

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 106 / 201
Programmation Dynamique

Table des Matières

1 Rappels : Fonctions et Ordres de grandeurs

2 Diviser pour Régner

3 Approches Gloutonnes

4 Programmation Dynamique
Weighted Interval Scheduling
Principe de la Programmation Dynamique
Subset-sum et Knapsack Problems
Multiplication de matrices
Analyse syntaxique
Alignement de séquences/Distance d’édition (déjà vu dans le module AGR1)
Limitations de la Programmation Dynamique

5 Théorie de la NP-complétude

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 107 / 201
Programmation Dynamique Weighted Interval Scheduling

Weighted Interval Scheduling

Problème 14 (Weighted Interval Scheduling)


Entrée : n requêtes étiquetées 1, . . . , n, avec pour chaque requête i un
intervalle [si , fi ] d’exécution, et un poids vi .
Sortie : Un sous-ensemble S ⊆ {1, . . . , n} de requêtes
P compatibles (leurs
intervalles ne se chevauchent pas) qui maximise i∈S vi .

Exercice 4.1
Quel est le lien entre le
problème Weighted In-
terval Scheduling et le
problème des activités vu au
Chapitre précédent ?

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 108 / 201
is the leftmost interval that ends before j begins. WeDynamique
Programmation define p(]) = 0Weighted
if no Interval Scheduling
request i < j is disjoint from ]. An example of the definition of p(]) is shown
in Figure 6.2.
Weighted Interval Scheduling : une procédure récursive
Now, given an instance of the Weighted Interval Scheduling Problem, let’s
consider an optimal solution CO, ignoring for now that we have no idea what
it is. Here’s something completely obvious that we can say about CO: either
interval n (the last one) belongs to CO, or it doesn’t. Suppose we explore both
sidessuppose
On of this dichotomy
les arequêtes
little further. If n ~ CO, then clearlyselon
numérotées no interval indexed f ≤ f . . . ≤ f . On
l’ordre dira que i est
1 2 n
strictly between p(n) and n can belong to CO, because by the definition ofp(n),
avant j si fi ≤ fj , donc, avecn la numérotation
- 1 all overlap interval n. choisie, lorsque i < j.
Moreover, if n s CO, then CO must include an optimal solution to the problem
Pour unofintervalle
consisting requests {1 ..... j, on définit
p(n)}--for if it didn’t,p(j) comme
we could le plus grand indice i < j
replace CO’s tel que i et j
choice of requests from {1 ..... p(n)} with a better one, with no danger of
soient
overlappingdes intervalles
request n. compatibles, et il vaut 0 si aucun tel i n’existe.
(Faire le lien avec le problème des activités)
Index
V1 = 2
1 t p(1) = 0
172 = 4
2 t p(2) = 0
3 V3 = 4
p(3) = 1
4 v4= 7
p(4) = 0
5 p(S) = 3
6 1 p(6) = 3

Figure 6.2 An instance of weighted interval scheduling with the functions p(i) defined
Par
for eachdéfinition
interval j. de p(j), j n’est compatible avec aucune des requêtes p(j) + 1, . . . ,
j − 1.
Une solution optimale O est telle que :
si n ∈ O, alors les intervalles p(n) + 1, . . . , n − 1 ne sont pas dans O, et O doit
contenir une solution optimale du sous-problème pour les requêtes {1, . . . , p(n)} ;
sinon (n 6∈ O) O contient une solution optimale pour le sous-problème {1, . . . , n − 1}.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 109 / 201
Programmation Dynamique Weighted Interval Scheduling

Une solution optimale O est telle que :


si n ∈ O, alors les intervalles p(n) + 1, . . . , n − 1 ne sont pas dans O, et O doit
contenir une solution optimale du sous-problème pour les requêtes {1, . . . , p(n)} ;
sinon (n 6∈ O) O contient une solution optimale pour le sous-problème
{1, . . . , n − 1}.
Considérons les sous-problèmes Pj restreint de requêtes {0, . . . , j}, le problème initial
étant Pn ). Soit Oj une solution optimale de Pj et de valeur v ∗ (j).
On convient que v ∗ (0) = 0.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 110 / 201
Programmation Dynamique Weighted Interval Scheduling

Une solution optimale O est telle que :


si n ∈ O, alors les intervalles p(n) + 1, . . . , n − 1 ne sont pas dans O, et O doit
contenir une solution optimale du sous-problème pour les requêtes {1, . . . , p(n)} ;
sinon (n 6∈ O) O contient une solution optimale pour le sous-problème
{1, . . . , n − 1}.
Considérons les sous-problèmes Pj restreint de requêtes {0, . . . , j}, le problème initial
étant Pn ). Soit Oj une solution optimale de Pj et de valeur v ∗ (j).
On convient que v ∗ (0) = 0.
Pour exprimer la valeur v ∗ (j), on raisonne selon que j ∈ Oj ou j ∈
/ Oj :

v ∗ (j) = max(vj + v ∗ (p(j)), v ∗ (j − 1)) (1)

Ainsi

j ∈ Oj ssi vj + v ∗ (p(j)) ≥ v ∗ (j − 1) (2)

On en déduit un algorithme récursif ...


S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 110 / 201
Programmation Dynamique Weighted Interval Scheduling

Algorithme récursif

Algorithm 17 Algorithm Opt(j)


1: if j = 0 then
2: return 0
3: else
4: return max(vj + Opt(p(j)), Opt(j − 1))
5: end if

Théorème
Opt(j) calcule v ∗ (j) correctement pour tout j ∈ {0, . . . , n}.

Par définition v ∗ (0) = 0.


Soit j > 0 et supposons que Opt(i) calcule v ∗ (i) pour tout i < j. On a

v ∗ (j) = max(vj + v ∗ (p(j)), v ∗ (j − 1)) // d’après (1)

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 111 / 201
Programmation Dynamique Weighted Interval Scheduling

Algorithme récursif

Algorithm 17 Algorithm Opt(j)


1: if j = 0 then
2: return 0
3: else
4: return max(vj + Opt(p(j)), Opt(j − 1))
5: end if

Théorème
Opt(j) calcule v ∗ (j) correctement pour tout j ∈ {0, . . . , n}.

Par définition v ∗ (0) = 0.


Soit j > 0 et supposons que Opt(i) calcule v ∗ (i) pour tout i < j. On a

v ∗ (j) = max(vj + v ∗ (p(j)), v ∗ (j − 1)) // d’après (1)


= max(vj + Opt(p(j)), Opt(j − 1)) // par hyp. ind.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 111 / 201
Programmation Dynamique Weighted Interval Scheduling

Algorithme récursif

Algorithm 17 Algorithm Opt(j)


1: if j = 0 then
2: return 0
3: else
4: return max(vj + Opt(p(j)), Opt(j − 1))
5: end if

Théorème
Opt(j) calcule v ∗ (j) correctement pour tout j ∈ {0, . . . , n}.

Par définition v ∗ (0) = 0.


Soit j > 0 et supposons que Opt(i) calcule v ∗ (i) pour tout i < j. On a

v ∗ (j) = max(vj + v ∗ (p(j)), v ∗ (j − 1)) // d’après (1)


= max(vj + Opt(p(j)), Opt(j − 1)) // par hyp. ind.
= Opt(j) // Algorithm ??

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 111 / 201
Programmation Dynamique Weighted Interval Scheduling

Inefficacité de la version récursive

Opt(6)

Opt(5) Opt(4)

Opt(4) Opt(3) Opt(3)


Appels récursifs pour Opt(6) :
Opt(3) Opt(2) Opt(1) Opt(2) Opt(1)

Opt(2) Opt(1) Opt(1) Opt(1)

Opt(1)

L’appel Opt(j) engendre des appels récursifs indépendants à des sous-problèmes de taille
j − 1 et j − 2, et on grandit exponentiellement

Voir le cas de la suite de Fibonacci uk = uk−1 + uk−2 .

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 112 / 201
Programmation Dynamique Weighted Interval Scheduling

Mémoization

Calculer Opt(n) demande de résoudre n + 1 sous-problèmes : Opt(0), Opt(1), . . . Opt(n).


On mémorise ses résultats dans Mem[0..n], où Mem[i] = Opt(i).

Algorithm 18 MemOpt(j)
1: if j = 0 then
2: return 0
3: else
4: if Mem[j] is not empty then
5: return Mem[j]
6: else
7: Mem[j] := max(vj + MemOpt(p(j)), MemOpt(j − 1))
8: return Mem[j]
9: end if
10: end if

Théorème
Le temps d’exécution de MemOpt(n) est en O(n), si on suppose que les intervalles sont
triés par ordre croissant de date de fin.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 113 / 201
Programmation Dynamique Weighted Interval Scheduling

Analyse de la version mémoı̈sée

Théorème
Le temps d’exécution de MemOpt(n) est en O(n), si on suppose que les
requêtes/intervalles sont triés par ordre croissant de date de fin.

Démonstration.
Le temps utilisé pour un appel à MemOpt est O(1) hormis les appels récursifs qu’il
engendre. Donc le temps d’exécution de MemOpt est borné par une constante fois le
nombre d’appels issus de MemOpt.
On cherche une bonne mesure de “progrès” pour borner ce nombre d’appels : soit
ne(Mem) le nombre d’entrées de Mem qui ne sont pas vides.
Initialement, ne(Mem) = 0.
À chaque invocation de la récurrence, c’est à dire dans l’évaluation de
max(vj + MemOpt(p(j), MemOpt(j − 1)) en ligne 7, on remplit une nouvelle entrée de
Mem, donc ne(Mem) vaut 1 de plus. Or ne(Mem) ≤ n + 1, il ne peut donc y avoir qu’au
plus O(n) appels à MemOpt.

Exercice 4.2
Mais où se cache l’hypothèse “on suppose que les intervalles sont triés par ordre croissant
de date de fin” ?
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 114 / 201
Programmation Dynamique Weighted Interval Scheduling

Calcul de la solution en plus de sa valeur

Simultanément au calcul du tableau Mem, on peut maintenir un tableau S tel que S[j]
contient un ensemble optimal de requêtes/intervalles dans {1, . . . , j}.
Un calcul naı̈f de S induit un facteur O(n) à l’agorithme : si la mise à jour d’un
calcul de Mem est en O(1), celui de S est en O(n) car il faut écrire tout un
sous-ensemble de {1, . . . , n}.
On peut faire plus efficace en ne calculant pas explicitement S mais en retrouvant la
solution optimale à partir des valeurs sauvées pour le calcul de Mem.
On a vu que j ∈ Oj ssi vj + v ∗ (p(j)) ≥ v ∗ (j − 1), d’où :

Algorithm 19 FindSolutionOpt(j)
1: if j = 0 then
2: return ∅
3: else
4: if vj + Mem[p(j)] ≥ Mem[j − 1] then . Il faut sélectionner l’intervalle j
5: return {j} ∪ FindSolutionOpt(p(j))
6: else . Il ne faut pas sélectionner l’intervalle j
7: return FindSolutionOpt(j − 1)
8: end if
9: end if

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 115 / 201
Programmation Dynamique Weighted Interval Scheduling

Complexité de FindSolutionOpt

Algorithm 20 FindSolutionOpt(j)
1: if j = 0 then
2: return ∅
3: else
4: if vj + Mem[p(j)] ≥ Mem[j − 1] then . Il faut sélectionner l’intervalle j
5: return {j} ∪ FindSolutionOpt(p(j))
6: else . Il ne faut pas sélectionner l’intervalle j
7: return FindSolutionOpt(j − 1)
8: end if
9: end if

Puisque FindSolutionOpt(n) s’appelle récursivement sur des valeurs strictement plus


petites, il y a au plus O(n) appels récursifs. Sachant que le reste des instructions
s’exécute en temps constant, on a :

Théorème
Étant donné le tableau Mem des valeurs optimales des sous-problèmes Pj (0 ≤ j ≤ n),
l’algorithme FindSolutionOpt(n) retourne une solution optimale en temps O(n).
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 116 / 201
Programmation Dynamique Principe de la Programmation Dynamique

Sur l’exemple de Weighted Interval Scheduling

Jusqu’à présent nous avons trouvé un algorithme polynomial en plusieurs étapes


1 une version récursive
2 sa conversion par mémoı̈zation en un algo récursif efficace qui utilise un tableau
global Mem des valeurs optimales des sous-problèmes

On va voir qu’en organisant les sous-problèmes par strates, on obtient un algorithme qui
est plus efficace en mémoire.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 117 / 201
Programmation Dynamique Principe de la Programmation Dynamique

Itération de sous-problèmes au lieu de Mémoı̈zation Récursive

Algorithm 21 IterativeOpt(v1 , . . . , vn )
1: Mem[0] = 0
2: for j = 1, 2 . . . , n do
3: Mem[j] = max(vj + Mem[p(j)], Mem[j − 1])
4: end for

On établit facilement que IterativeOpt(n)


Chapter est correct, et en temps O(n).
6 Dynamic Programming
260
(Sur le dessin ci-dessous lire vi au lieu de wi .)
0123456
Index
L~I = 2
1
p(1) = 0
w2 = 4
2 0~2 4
I/73 = 4
p(3) = 1
3
1B4=7
p(4) = o I4 !6 ~ ~ I I
4
tV5 = 2 I
5
tu6 =
6 ->

Co)

S. Pinchinat (IRISA, Université de Rennes Figure


1) 6.5 Part (b) shows the algorithmiques
Méthodes iterations of r~cerag±ve-¢omPu~Ce-0P~c on
UE ALG the sample
– année 2019-2020 118 / 201
Programmation Dynamique Principe de la Programmation Dynamique

Complexité de Weighted Interval Scheduling

Exercice 4.3
Quelle est la complexité de Weighted Interval Scheduling ?
Veuillez soigneusement répondre à cette question en consultant la littérature. On pourra
regarder à http://farazdagi.com/blog/2013/weighted-interval-scheduling/.

Exercice 4.4
Montrer que l’algorithme glouton pour le choix d’activités échoue lamentablement pour
résoudre le Weighted Scheduling Intervals.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 119 / 201
Programmation Dynamique Principe de la Programmation Dynamique

Principes de la Programmation Dynamique (PrDy)

Le concept a été introduit au début des années 1950 par Richard Bellman. À l’époque, le
terme “programmation” signifie planification et ordonnancement.
Nous allons voir des exemples avec des solutions du type itération de sous-problèmes,
mais toutes les solutions peuvent être reformulées en mémoı̈zation récursive.
Pour développer des algorithmes du type PrDy, il faut avoir une collection de
sous-problèmes basés sur le problème d’origine qui satisfait :

(i) Il y a un nombre polynomial de sous-problèmes,

(ii) La solution du problème d’origine se calcule à partir des solutions de ces


sous-problèmes (par exemple parce qu’il est l’un des sous-problèmes),

(iii) Il y a un ordre naturel entre les sous-problèmes, des “plus petits” aux “plus grands”,
avec un calcul facile pour calculer la solution d’un sous-problème à partir de
solutions de sous-problèmes plus petits.

Exemple 28 (Weighted Scheduling Intervals)


v ∗ (j) = max(vj + v ∗ (p(j)), v ∗ (j − 1))
j ∈ Oj ssi vj + v ∗ (p(j)) ≥ v ∗ (j − 1)

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 120 / 201
Programmation Dynamique Subset-sum et Knapsack Problems

Subset Sum Problem (SSP)

On suppose une machine qui doit exécuter des requêtes 1, ..., n, mais qui ne dispose que
d’une durée limitée entre 0 et W , et qui ne peut exécuter qu’une chose à la fois. Une
requête i demande un temps wi pour s’exécuter, mais on veut exploiter la machine au
maximum. Dit de manière plus abstratite, on a le problème suivant.

Problème 15 (Subset Sum Problem)


Entrée : Un ensemble E = {1, . . . , n} d’items, avec un poids wi ≥ 0 pour
chacun, et une borne W . P
⊆ {1, . . . , n} des items tel que i∈S wi est
Sortie : Un sous-ensemble S P
maximale tout en respectant i∈S wi ≤ W .

Remarque : c’est un cas particulier de Knapsack Problem où pi = wi (profit=poids).

Problème 16 (Knapsack Problem (kp))


Entrée : n objets, pour chaque objet i deux valeurs wi (≥ 0 son poids) et
pi (son profit/sa valeur), une constante K ≥ 0
Sortie : Des valeurs x1 , x2 , . . . , xn dans {0, 1} telles que Σni=1 wi .xi ≤ K et
qui maximise le profit Σni=1 pi .xi .

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 121 / 201
Programmation Dynamique Subset-sum et Knapsack Problems

Des algorithmes gloutons pour SSP ?

Problème 17 (Subset Sum Problem)


Entrée : Un ensemble E = {1, . . . , n} d’items, avec un poids wi ≥ 0 pour
chacun, et une borne W . P
⊆ {1, . . . , n} des items tel que i∈S wi est
Sortie : Un sous-ensemble S P
maximale tout en respectant i∈S wi ≤ W .

On vient de voir que SSP est un cas particulier du problème du sac à doc (Knapsack
Problem) où pi = wi (profit=poids).
Le glouton du problème sac à dos fractionnaire – qui on le rappelle n’est pas optimal
pour le problème du sac à dos en nombre entiers – n’apporte rien avec le critère de
sélection des wpii décroissants ne distingue aucun élements, étant égal à 1 pour tous les
items.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 122 / 201
Programmation Dynamique Subset-sum et Knapsack Problems

Des algorithmes gloutons pour SSP ?

Problème 17 (Subset Sum Problem)


Entrée : Un ensemble E = {1, . . . , n} d’items, avec un poids wi ≥ 0 pour
chacun, et une borne W . P
⊆ {1, . . . , n} des items tel que i∈S wi est
Sortie : Un sous-ensemble S P
maximale tout en respectant i∈S wi ≤ W .

On vient de voir que SSP est un cas particulier du problème du sac à doc (Knapsack
Problem) où pi = wi (profit=poids).
Le glouton du problème sac à dos fractionnaire – qui on le rappelle n’est pas optimal
pour le problème du sac à dos en nombre entiers – n’apporte rien avec le critère de
sélection des wpii décroissants ne distingue aucun élements, étant égal à 1 pour tous les
items. On peut essayer d’autres choses, qui échouent :

Si on sélectionne les items par ordre décroissant de poids (parmi ceux dont le poids
est ≤ W ), alors une instance de SSP comme [W /2 + 1, W /2, W /2] ne donne pas la
solution optimale.
Si on sélectionne les items par ordre croissant de poids, alors une instance de SSP
comme [1, W /2, W /2] ne donne pas la solution optimale non plus.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 122 / 201
Programmation Dynamique Subset-sum et Knapsack Problems

Identification des sous-problèmes et des solutions optimales

On se fixe une instance ({1, . . . , n}, W ) de SSP.


Pour chaque i ∈ {1, . . . , n} et w ∈ {0, 1, . . . W }, on note v ∗ (i, w ) la valeur d’une solution
optimale de l’instance Pi,w de SSP où on cherche donc à sélectionner un sous-ensemble
d’items dans {1, . . . , i} de poids maximum sans dépasser le poids autorisé w . Ainsi,

v ∗ (i, w ) = max{S⊆{1,...,i} | Pj∈S wj ≤w }


X
wj
j∈S

Résoudre le problème pour l’instance ({1, . . . , n}, W ) de SSP revient à résoudre le


problème Pn,W en calculant v ∗ (n, W ).

Remarque 4.1
Contrairement au problème Weighted Interval Scheduling, on ne peut pas simplement
considérer v ∗ (i) car le fait de prendre l’item i change le contexte pour les sous-problèmes
à résoudre à cause de la quantité w .

Soit O une solution optimale de Pi,w .


si i ∈ O alors v ∗ (i, w ) = wi + v ∗ (i − 1, w − wi )
sinon v ∗ (i, w ) = v ∗ (i − 1, w ) ; c’est le cas par exemple lorsque w < wi .

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 123 / 201
Programmation Dynamique Subset-sum et Knapsack Problems

Un algorithme déduit de la relation de récurrence

Une meilleure sélection O parmi {1, . . . , i} sans dépasser le poids autorisé w vérifie
si i ∈ O alors v ∗ (i, w ) = wi + v ∗ (i − 1, w − wi )
sinon v ∗ (i, w ) = v ∗ (i − 1, w ) ; c’est le cas par exemple lorsque w < wi .
Donc
max(v ∗ (i − 1, w ), wi + v ∗ (i − 1, w − wi )) si wi ≤ w

v ∗ (i, w ) = (3)
v ∗ (i − 1, w ) sinon
On déduit de (3) l’algorithme suivant :

Algorithm 22 SubsetSum(n, W )
1: Array Mem[0..n, 0..W ]
2: for w = 0, 1 . . . W do
3: Mem[0, w ] = 0
4: end for
5: for j = 1, 2 . . . , n do
6: for w = 0, . . . , W do
7: Utiliser (3) pour définir Mem[i, w ]
8: end for
9: end for

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 124 / 201
Programmation Dynamique Subset-sum et Knapsack Problems

Un algorithme déduit de la relation de récurrence

Une meilleure sélection O parmi {1, . . . , i} sans dépasser le poids autorisé w vérifie
si i ∈ O alors v ∗ (i, w ) = wi + v ∗ (i − 1, w − wi )
sinon v ∗ (i, w ) = v ∗ (i − 1, w ) ; c’est le cas par exemple lorsque w < wi .
Donc
max(v ∗ (i − 1, w ), wi + v ∗ (i − 1, w − wi )) si wi ≤ w

v ∗ (i, w ) = (3)
v ∗ (i − 1, w ) sinon
Algorithm 22 SubsetSum(n, W )
1: Array Mem[0..n, 0..W ]
2: for w = 0, 1 . . . W do
3: Mem[0, w ] ← 0
4: end for
5: for i = 1, 2 . . . , n do
6: for w = 0, . . . , W do
7: if w [i] ≤ w then
8: Mem[i, w ] ← Mem[i − 1, w ]
9: else
10: Mem[i, w ] ← max(Mem[i − 1, w ], wi + Mem[i − 1, w − wi ])
11: end if
12: end for
13: end for
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 124 / 201
Programmation Dynamique Subset-sum et Knapsack Problems

Remplissage de la table Mem[0..n, 0..W ], à deux dimensions

Chapter 6Mem[i,
L’entrée Dynamic Programming
w ] est une fonction des entrées Mem[i − 1, w ] et Mem[i − 1, w − wi ].

0
0
0
I
0
0 ,.....--
0
0
0
0
2 0
1 0
0 0 0 o 0 0 0 0 00 0 0 0 0 0 0

Figure 6.11 The two-dimensional table of OPT values. The leftmost column and bottom
row is always 0. The entry for OPT(i, w) is computed from the two other entries
S.OPT(i
Pinchinat--(IRISA,
I, w)Université
and OPT(i -- 1,
de Rennes 1) w -- wi), as indicated by the arrows.
Méthodes algorithmiques UE ALG – année 2019-2020 125 / 201
Programmation Dynamique Subset-sum et Knapsack Problems

Un exemple d’exécution de SubsetSum


6.4 Subset Sums and Knapsacks: Adding a Variable

Knapsack size W - 6, items w1 = 2, w2 = 2, w3 = 3

3 3
2 2
1 0 0 2 2 2 2 2
0 0 0 0 0 0 0 0 0 0 0 0 o 0
0 123456 0123456
Initial values Filling in values for i = 1

0 0 2 3 4 5 5
0 0 2 2 4 4 4 0 o 2 2 4 4 4
0 0 2 2 2 2 2 1 0 0 2 2 2 2 2
0 0 0 0 0 o 0 0 0 0 0 0 0 0 0
0123456 0123456
Filling in values for i = 2 Filling in values for i = 3

igure 6.12 The iterations of the algorithm on a sample instance of the Subset Sum
roblem.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 126 / 201
Programmation Dynamique Subset-sum et Knapsack Problems

Analyse de l’algorithme SubsetSum(n, W )

Algorithm 23 SubsetSum(n, W )
1: Array Mem[0..n, 0..W ]
2: for w = 0, 1 . . . W do
3: Mem[0, w ] ← 0
4: end for
5: for i = 1, 2 . . . , n do
6: for w = 0, . . . , W do
7: if w [i] ≤ w then
8: Mem[i, w ] ← Mem[i − 1, w ]
9: else
10: Mem[i, w ] ← max(Mem[i − 1, w ], wi + Mem[i − 1, w − wi ])
11: end if
12: end for
13: end for

Théorème 29
L’algorithme SubsetSum termine, est correct, et s’exécute en O(nW ).

Remarque 4.2
L’algorithme est pseudo-polynomial à cause de W qui dépend de la nature de l’entrée et
pas uniquement du nombre n d’items.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 127 / 201
Programmation Dynamique Multiplication de matrices

Multiplication de matrices

On rappelle que si A est une matrice (de dimension) p × q et B est une matrice q × r , le
produit C = AB de dimension p × r est calculé comme suit :
pour tous 1 ≤ i ≤ p et 1 ≤ j ≤ r , on a
q
X
cij = aik × bkj
k=1

Il y a donc p × r coefficients scalaires cij qui se calculent avec q multiplications scalaires


(aik × bkj pour 1 ≤ k ≤ q), soit en tout p × q × r multiplications scalaires.

Problème 18 (Multiplication de matrices)


Entrée : Une suite finie de matrices A1 , . . . , An , où pour tout i = 1, . . . , n,
Ai est de dimension pi−1 × pi
Sortie : Un parenthésage du produit A1 A2 . . . An qui minimise le nombre
de multiplications scalaires

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 128 / 201
Programmation Dynamique Multiplication de matrices

Multiplication de matrices : bien parenthéser

Exemple 30
On considère A1 , A2 , A3 où la matrice Ai est de dimension pi1 × pi , avec p0 = 10, p1 = 100,
p2 = 5 et p3 = 50.
si on parenthèse ((A1 A2 )A3 ) on obtient un coût de 10 × 100 × 5 produits pour
calculer A1 A2 , puis 10 × 5 × 50 produits pour multilier ce résultat avec A3 . Soit 7500
multiplications scalaires.
si on parenthèse (A1 (A2 A3 )) 100 × 5 × 50 + 10 × 100 × 50, soit 75000
multiplications scalaires.
On peut donc gagner beaucoup en parenthésant bien !
Comptabilisons le nombre P(n) façons possibles de parenthéser une séquence de n
matrices (nombre de Catalan). Clairement P(1) = 1. Pour n > 1, un produit matriciel
entièrement parenthésé est le produit de deux sous-produits matriciels entièrement
parenthésés, et la démarcation entre les deux sous-produits peut intervenir entre les kème
et (k + 1)ème matrices, pour tout k = 1, 2, ..., n − 1. On obtient donc la récurrence

1 si n = 1,
P(n) = Pn−1
k=1 P(k)P(n − k) si n ≥ 2.

En fait P(n) est en Ω(2n ), et une recherche naı̈ve n’est pas viable.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 129 / 201
Programmation Dynamique Multiplication de matrices

Structure d’un parenthésage optimal

Étape 1 de la PrDy. On cherche la sous-structure optimale et on s’en sert.


On notera Ai...j le produit Ai Ai+1 . . . Aj .

Exercice 4.6
Établir que si on a un parenthésage optimal pour Ai...j , alors il fractionne ce produit entre
Ak et Ak+1 pour un i ≤ k < j. Alors les parenthésages pour Ai...k Ak+1...j sont forcément
optimaux.
Il faut donc chercher où fractionner le produit Ai...j .
Étape 2 de la PrDy. On définit récursivement le coût d’une solution optimale en
fonction du coût des solutions optimales de sous-problèmes.
On utilise notre sous-structure optimale pour montrer que nous pouvons construire une
solution optimale du problème à partir de solutions optimales de sous-problèmes.
On prend comme sous-problèmes les produits Ai...j pour 1 ≤ i ≤ j ≤ n, et soit m[i, j] le
coût optimal pour calculer ce produit.
On a 
m[i, i] = 0, pour tout i = 1, . . . , n
m[i, j] = mini≤k<j m[i, k] + m[k + 1, j] + pi−1 × pk × pj , si i < j

Pour le problème principal est A1...n , et le résultat cherché est m[1, n].
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 130 / 201
m[i, j]. Programmation Dynamique Multiplication de matrices
Pour implémenter correctement l’approche ascendante (bottom-up), nous devons dé-
L’algorithme terminer quels sont les éléments du tableau qui servent à calculer m[i, j]. L’équa-
tion (15.12) montre que le coût m[i, j] du calcul d’un produit enchaîné de j − i + 1
matrices ne dépend que des coûts de calcul de produits enchaînés impliquant moins
c Dunod – La photocopie non autorisée est un délit
On note s[i, j] la de + 1 matrices.
j − ipetite)
(plus valeur Autrement dit, pour k m[i,
k qui minimise = i, i j],
+ 1,et 1, la matrice
, j −suppose
. . .on i..k est
queAl’entrée
un produit de k − i + 1 < j − i + 1 matrices et la matrice Ak+1..j est un produit de
est une séquence jp−=k < hpj0− . , pn i, où
, pi1+, .1. matrices. longueur [p] = n + 1.
L’algorithme doit donc remplir le tableau m d’une façon
qui corresponde à la résolution du problème du parenthésage pour des chaînes de
On organise les calculs en faisant d’abord grandir la longueur du produit Ai...j , c’est à
matrices de longueur croissante.
dire la valeur l = j − i + 1, puis la valeur i.
O RDRE -C HAÎNE - MATRICES(p)
1 n ← longueur[p] − 1
328 15 • Programmation dynamique
2 pour i ← 1 à n
3 faire m[i, i] ← 0
!

4 pour l ← 2 à n ! l est la longueur de la chaîne.


5 faire pour i ← 1 à n − l + 1
6 faire j ← i + l − 1
7 m[i, j] ← ∞
8 pour k ← i à j − 1
9 faire q ← m[i, k] + m[k + 1, j] + pi−1 pk pj
10 si q < m[i, j]
11 alors m[i, j] ← q
12 s[i, j] ← k
13 retourner m et s

3 L’algorithme commence par l’affectation m[i, i] ← 0, pour i = 1, 2, . . . , n (coûts


On obtient un algorithme en les
minimaux pour O(n ). de longueur 1) aux lignes 2–3. Il utilise ensuite la récur-
chaînes
rence (15.12) pour calculer m[i, i+1] pour i = 1, 2, . . . , n−1 (coûts minimaux pour les
chaînes
S. Pinchinat (IRISA, Université de longueur
de Rennes 1) l = 2) Méthodes
pendantalgorithmiques
la première exécution de laUE boucle
ALG – des
annéelignes 4–
2019-2020 131 / 201
Programmation Dynamique Multiplication de matrices
A1 A2 A3 A4 A5matrice
A6 dimension
A1 30 × 35
Un exemple du produit de matrices
Figure 15.3 Les tableaux m et s calculés A2 par35O× 15
RDRE -C HAÎNE -M ATRICES pour n = 6 et les
dimensions de matrices suivantes : A 3 15 × 5
A4 5 × 10
A5
matrice 10 × 20
dimension
A16
A 20 ×
30 25
× 35
A2 35 × 15
Les tableaux sont tournés pour présenterAhorizontalement 15 × 5 leur diagonale principale. Seule la dia-
3
gonale principale et le triangle supérieurAsont utilisés
4 5 × 10dans le tableau m ; pour le tableau s, seul
le triangle supérieur est utilisé. Le nombre A5 minimal10 ×de20multiplications scalaires nécessaires pour
multiplier les 6 matrices est m[1, 6] = 15 125. A6 Parmi 20 ×les25éléments foncés, les paires ayant le même
ombrage sont regroupées en ligne 9 lors du calcul de
Les tableaux sont tournés pour présenter horizontalement leur diagonale principale. Seule la dia-
m[2, 2] supérieur
gonale principale et le triangle + m[3, 5] +sont
p1 p2utilisés
p5 = 0 dans
+ 2 500
le + 35 · 15 ·m
tableau 20; pour= 13 000 , s, seul
le tableau
m[2
le triangle , 5] = minest m[2
supérieur utilisé. + m[4
, 3] Le , 5] + pminimal
nombre 1 p3 p5 = de
2 625 + 1 000 + 35 ·scalaires
multiplications 5 · 20 = 7nécessaires
125 , pour
m[2m[1
multiplier les 6 matrices est , 4] ,+6] = 15
m[5 , 5]125.
+ p1 pParmi les éléments foncés, les paires
4 p5 = 4 375 + 0 + 35 · 10 · 20 = 11 ayant
375 le même
ombrage sont regroupées en ligne 9 lors du calcul de
= 7125 .
m[2, 2] + m[3, 5] + p1 p2 p5 = 0 + 2 500 + 35 · 15 · 20 = 13 000 ,
m[2, 5] = min m[2, 3] + m[4, 5] + p1 p3 p5 = 2 625 + 1 000 + 35 · 5 · 20 = 7 125 ,
montre pas directement comment multiplier les matrices. Il n’est pas difficile de
m[2, 4] + m[5, 5] + p1 p4 p5 = 4 375 + 0 + 35 · 10 · 20 = 11 375
construire une solution optimale à partir des données calculées et mémorisées dans
le tableau s[1 =. .7125 n, 1 .. . n]. Chaque élément s[i, j] contient la valeur de k telle que le
parenthésage optimal de Ai Ai+1 · · · Aj implique un fractionnement du produit entre
Ak et Ak+1
montre pas. On sait donc comment
directement que, pourmultiplier
le calcul optimal de A1..n
les matrices. Il ,n’est
la dernière multipli-
pas difficile de
cation matricielle
construire sera le
une solution produitàde
optimale A1..s[1,n]
partir et As[1,n]+1..n
des données . Lesetmultiplications
calculées mémorisées dans an-
térieures
le tableaupeuvent
s[1 . . n, être calculées
1 . . n]. Chaquerécursivement
élément s[i, j]; contient
en effet,las[1, valeur de kdétermine
s[1, n]] telle que lela
dernière multiplication
parenthésage optimal deeffectuée
Ai Ai+1 · · lors du calculun
· Aj implique A1..s[1,n] et s[s[1,
defractionnement du n] + 1, n]entre
produit dé-
termine
A la dernière multiplication effectuée lors du calcul de As[1,n]+1..n
k et Ak+1 . On sait donc que, pour le calcul optimal de A1..n , la dernière . La procé-
multipli-
dure récursive
cation matricielleci-après
sera affiche un parenthésage
le produit de A1..s[1,n] etoptimal de !A
As[1,n]+1..n i , Ai+1
. Les , . . . , Aj ", à partir
multiplications an-
du tableaupeuvent
térieures s calculé O RDRE -C
êtreparcalculées HAÎNE -M ATRICES
récursivement et des
; en effet, s[1,indices et j. L’appel
s[1, n]]i détermine la
initial A FFICHE
dernière -PARENTHÉSAGE
multiplication effectuée -O lorsPTIMAL (s, 1,de
du calcul n) affiche
A1..s[1,n]unetparenthésage
s[s[1, n] + 1,optimal
n] dé-
de !A1 , Ala2(IRISA,
termine
S. Pinchinat ...,A
, dernièren ". multiplication
Université de Rennes 1) effectuée lors du calcul
Méthodes de A
algorithmiques . La procé-UE ALG – année 2019-2020 132 / 201
Programmation Dynamique Multiplication de matrices

Calcul du parenthésage

On sait que la dernière multiplication matricielle sera le produit de A1...s[1,n] avec


As[1,n]+1...n .
330 15 • Programmation dynamique

A FFICHAGE -PARENTHÉSAGE -O PTIMAL(s, i, j)


1 si i = j
2 alors afficher« A »i
3 sinon afficher« ( «
4 A FFICHAGE -PARENTHÉSAGE -O PTIMAL(s, i, s[i, j])
5 A FFICHAGE -PARENTHÉSAGE -O PTIMAL(s, s[i, j] + 1, j)
6 print » ) »

Dans l’exemple de la figure 15.3, l’appel A FFICHAGE -PARENTHÉSAGE -O PTIMAL(s, 1, 6)


affiche le parenthésage ((A1 (A2 A3 ))((A4 A5 )A6 )).

Exercices
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 133 / 201
Programmation Dynamique Analyse syntaxique

Le problème du mot pour les grammaires algébriques

Problème 19 (Problème du mot)


Entrée : Une grammaire algébrique G = (T , N, S, R) en forme normale
de Chomsky et s ∈ T ∗
Sortie : s ∈ L(G )

Ce n’est pas un problème d’optimisation, mais in problème de décision.

Définition 31
On rappelle que G = (T , N, S, R) est en forme normale de Chomsky, si toutes les règles
sont de la forme (a) X → YZ avec Y , Z ∈ N, ou (b) X → a avec a ∈ T (On peut
effectivement mettre toute grammaire algébrique sous cette forme), et éventuellement une
règle S → .

Théorème 32
Pour toute grammaire algébrique, il existe une grammaire en forme normale de Chomsky
qui lui soit équivalente (i.e. , qui engendre le même langage).

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 134 / 201
Programmation Dynamique Analyse syntaxique

Le problème du mot pour les grammaires algébriques

Remarque 4.3
Si G = (T , N, S, R) en forme normale de Chomsky, alors s ∈ T ∗ est engendrable avec la
règle X → YZ ssi on peut le séparer en s = tt 0 avec t (resp. t 0 ) engendrable à partir de
Y (resp. Z ).

On va donc s’intéresser au sous-problème de savoir si un facteur de s, de la forme s[i..j],


est engendrable à partir d’un non terminal X , ce que l’on note E [i, j, X ] qui vaudra
“vrai” ou “faux”.

E [i, i, X ] vaut vrai s’il existe une règle X → a et s[i] = a, 


W Wj−1
sinon E [i, j, X ] = X →YZ ∈R k=i E [i, k, Y ] ∧ E [k + 1, j, Z ]

Alors

s ∈ L(G ) si, et seulement si, E [1, |s|, S] vaut vrai

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 135 / 201
Programmation Dynamique Analyse syntaxique

Le problème du mot pour les grammaires algébriques

Soit G = (T , N, S, R) une grammaire algébrique en Forme Normale de Chomsky et


s ∈ T ∗.
On calcule les E [i, j, X ], où 1 ≤ i ≤ j ≤ |s et X ∈ N par ordre croissant de j − i selon
l’équation :
(
E [i, i, X ] ← vrai, s’il existe
W une règle X → a et s[i] = a
W j−1
E [i, j, X ] ← X →YZ ∈R k=i E [i, k, Y ] ∧ E [k + 1, j, Z ]

Après avoir fini de calculer, on retourne

s ∈ L(G ) si, et seulement si, E [1, |s|, S] vaut vrai

La complexité du calcul de E [1, |s|, S] en temps est O(|s|3 |G |2 ) :


on compte le nombre de E [i, j, X ] : on a O(|s|2 ) couples i < j à multiplier par le
nombre de non-terminaux de la grammaire |N| ∈ O(|G |).
le calcul de chacun des E [i, j, X ] est en O(|s|.|G |) : on doit chercher pour toutes les
valeurs intermédaires i ≤ k < j, donc en O(|s|), parmi toutes les règles où X
apparaı̂t dans le membre gauche, donc en O(|G |).
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 136 / 201
Programmation Dynamique Analyse syntaxique

Le problème du mot pour les grammaires algébriques

Exercice 4.7
Alternativement, on peut definir E [i, j] ⊆ N comme l’ensemble des non-terminaux
de G à partir desquels on peut engendrer s[i..j]. Alors s ∈ L(G ) ssi S ∈ E [1, |s|].
Donner les équations de récurrence pour calculer les E [i, j].
Écrire l’algorithme de programmation dynamique qui en découle : c’est l’algorithme
de Cocke-Younger-Kasami.

Exercice 4.8
Écrire un algorithme de mise sous forme normale de Chomsky. Quelle est sa complexité ?
Regarder http://compilation.irisa.fr/.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 137 / 201
6.3 Edit distance
Programmation Dynamique Alignement de séquences/Distance d’édition (déjà vu dans le module AGR1)

Le problème de la distance d’édition de deux séquences


When a spell checker encounters a possible misspelling, it looks in its dictionary for other
words that are close by. What is the appropriate notion of closeness in this case?
A natural measure of the distance between two strings is the extent to which they can be
aligned, or matched up. Technically, an alignment is simply a way of writing the strings one
above the :other.
Objectif For instance,
On cherche here areles
à “aligner” two possible
deux alignments
séquences of SNOWY
“SUNNY” et and SUNNY:
“SNOW”.
S − N O W Y − S N O W − Y
S U N N − Y S U N − − N Y
Cost: 3 Cost: 5

The “−” indicates a “gap”; any number of these can be placed in either string. The cost of an
alignment is the number of columns in which the letters differ. And the edit distance between
two strings is the cost of their best possible alignment. Do you see that there is no better
Le caractère “-” indique un vide.
alignment of SNOWY and SUNNY than the one shown here with a cost of 3?
Edit distance is so named because it can also be thought of as the minimum number of
Définition 33 (Coût
edits—insertions, d’unand
deletions, alignement)
substitutions of characters—needed to transform the first
string into the second. For instance,
C’est le nombre de colonnes dans lesquellesthe alignment showndiffèrent.
les lettres on the left corresponds to three
edits: insert U, substitute O → N, and delete W.
In general, there are so many possible alignments between two strings that it would be
Définition
terribly 34 (Distance
inefficient d’édition
to search through all entre
of themdeux séquences)
for the best one. Instead we turn to dynamic
programming.
C’est le coût de leur meilleur alignement.

A dynamic programming solution


When solving a problem by dynamic programming, the most crucial question is, What are the
subproblems? As long as they are chosen so as to have the property (*) from page 171. it is an
easy matter
S. Pinchinat toUniversité
(IRISA, write de down
Rennesthe
1) algorithm:Méthodes
iteratively solve one subproblem
algorithmiques after
UE ALG the2019-2020
– année other, in 138 / 201
an esoteric
Programmation activity
Dynamique practiced
Alignement by so few d’édition
de séquences/Distance people asvu to
(déjà dansnot even
le module meri
AGR1)
programming meant “planning,” and “dynamic programming” was
Distance d’édition plan multistage processes. The dag of Figure 6.2 can be thought of as
ways in which such a process can evolve: each node denotes a state, t
starting point, and the edges leaving a state represent possible actio
On parle de distance d’éditionstates
parceinqu’on
the next unit of time.
recherche un nombre minimum d’opérations
The etymology of linear programming, the subject of Chapter 7, is
appelées éditions de type
insertion
6.3 Edit distance
effacement
substitutions When a spell checker encounters a possible misspelling, it looks in
words that are close by. What is the appropriate notion of closeness in
A natural measure of the distance between two strings is the exte
aligned, or matched up. Technically, an alignment is simply a way of
Exemple 35 above the other. For instance, here are two possible alignments of SNO

S − N O W Y − S N O W −
S U N N − Y S U N − − N
Cost: 3 Cost: 5
Pour l’alignement de gauche,
TheU”,
on réalise trois éditions “insère “−”“substitue
indicates a O
“gap”;
par any
N”, number
“efface ofW”.
these can be placed in eithe
alignment is the number of columns in which the letters differ. And th
two strings is the cost of their best possible alignment. Do you see
Exercice 4.9 alignment of SNOWY and SUNNY than the one shown here with a cost o
Edit distance is so named because it can also be thought of as th
Donnez une suite d’éditions pour le cas de droite.
edits—insertions, deletions, and substitutions of characters—needed
string into the second. For instance, the alignment shown on the le
edits: insert U, substitute O → N, and delete W.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 139 / 201
Programmation Dynamique Alignement de séquences/Distance d’édition (déjà vu dans le module AGR1)

Distance d’édition/Alignement de séquences

Problème 20 (Distance d’édition)


Entrée : Deux séquences x[1..m] et y [1..n]
Sortie : La distance d’édition entre x et y .

Pour une solution par programmation dynamique, on doit répondre à :

1 Quels sont les sous-problèmes ?

2 Dans quel ordre organiser leur calcul de sorte que l’on puisse calculer les
sous-problèmes “grand” à partir de sous-problèmes “plus petits” ?

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 140 / 201
Programmation Dynamique Alignement de séquences/Distance d’édition (déjà vu dans le module AGR1)

E X P O N? E N T
Quels sont les sous-problèmes I A L

P O L Y N O M I A L
Les sous-problèmes portent sur le meilleur alignement des séquences x[1..i] et y [1..j],
dont on note E [i, j] le coût. Initialement, on veut calculer E [m, n].
S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani 175

ngExemple
at the edit
36 distance between some prefix of the first string, x[1 · · · i], and som
Figure 6.3 The subproblem E(7, 5).
e second, y[1 · · · j]? Call this subproblem E(i, j) (see Figure 6.3). Our final objective
compute E(m, n). E X P O N E N T I A L
Le sous-problème E [7, 5] :
to work, we need to somehow P express
O L Y N E(i, O Mj)I in
A terms
L of smaller subproblems
what do we know about the best alignment between x[1 · · · i] and y[1 · · · j]? Well, it
olumn can only
Le meilleur be onede
alignement ofx[1..i]
threeetthings:
y [1..j] est tel que sa dernière colonne est une des
about
trois formes looking at: the edit distance between some prefix of the first string, x[1 · · · i], and some
suivantes
prefix of the second, y[1 · · · j]? Call this subproblem E(i, j) (see Figure 6.3). Our final objective,
then, is to compute
x[i] E(m, n). − x[i]
For this to work, weor or E(i, j) in terms of smaller subproblems.
need to somehow express
− y[j] y[j]
Let’s see—what do we know about the best alignment between x[1 · · · i] and y[1 · · · j]? Well, its
rightmost column can only be one of three things:
se Définissons
incurs a cost of 1 (i,
sontDiff forj)this= 0 particular
si x[i] = y [j],column,
et sontDiff and (i,itj) remains
= 1 sinon.to align x[1 · · · i − 1
Ce qui permet d’écrire pour 1 ≤ i ≤ x[i]
m, 1or ≤ j −≤ n or x[i]
j]. But this is exactly the subproblem − E(i−1,y[j] j)! We seem to be getting somewhere
y[j]
nd case,Ealso [i,The
j] =withmin{1
first casecost +E
incurs 1,[iawe
cost still
− 1,of j], 1 need
1 for + [i,to
j −align
thisEparticular x[1and
1],column,
sontDiff · ·(i,
it j)with
· i] + Eto[iy[1
remains − 1,
align · x[1
· j· −
j· · ·−
1])}1] This i
i −1].
her subproblem, with y[1E(i,
· · · j]. But
j −this1).isAndexactlyinthethe final case,
subproblem which
E(i−1, j)! We seem either costs
to be getting 1 (if x[i] "= y[j]
somewhere.
0] =In ithe
E [i,what’s et second
E [0,isj]case, also with cost 1, we still need to align x[1 · · · i] with y[1 · · · j − 1]. This is
= et again left the subproblem Ineither
short,costswe have expressed
y[j]), = j. E(i − final − 1).
1, j case,
another subproblem, E(i, j − 1). And in the which 1 (if x[i] "= y[j])
rms of three
S. Pinchinat (IRISA,smaller
or 0Université
(if x[i] de subproblems
=Rennes
y[j]), what’s left is the
1)
subproblem
E(i −algorithmiques
Méthodes 1, j),E(i E(i,
− 1, j
j− −1).1),In E(i
short,
UE
we
1,have
−ALG −expressed
–jannée 1).
2019-2020We have
141 / 201n
Programmation Dynamique Alignement de séquences/Distance d’édition (déjà vu dans le module AGR1)

Dans quel ordre organiser les calculs ?

Les entrées E [i − 1, j], E [i, j − 1], E [i − 1, j − 1] sont nécessaires pour remplir l’entrée
E [i, j].
176 Algorithms
Exemple 37 ( avec x = EXPONENTIAL et y =POLYNOMIAL)
Figure 6.4 (a) The table of subproblems. Entries E(i − 1, j − 1), E(i − 1, j), and E(i, j − 1) are
(a) La table des sous-problèmes.
needed to fill in E(i, j). (b) The final table of values found by dynamic programming.
(b) Les valeurs finales de la table trouvées par la programmation dynamique.
(a) (b)

j−1 j n P O L Y N O M I A L
0 1 2 3 4 5 6 7 8 9 10
E 1 1 2 3 4 5 6 7 8 9 10
X 2 2 2 3 4 5 6 7 8 9 10
P 3 2 3 3 4 5 6 7 8 9 10
i−1 O 4 3 2 3 4 5 5 6 7 8 9
N 5 4 3 3 4 4 5 6 7 8 9
i
E 6 5 4 4 4 5 5 6 7 8 9
N 7 6 5 5 5 4 5 6 7 8 9
T 8 7 6 6 6 5 5 6 7 8 9
I 9 8 7 7 7 6 6 6 6 7 8
GOAL
A 10 9 8 8 8 7 7 7 7 6 7
m
L 11 10 9 8 9 8 8 8 8 7 6

With both the subproblems and the ordering specified, we are almost done. There just
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 142 / 201
remain the “base cases” of the dynamic programming,Alignement
the very smallest subproblems. (déjà vuIn
dansthe
remain the “base cases” of the dynamicDynamique
Programmation programming, the very smallest
de séquences/Distance subproblems.
d’édition le In theAGR1)
module
present situation, these are E(0, ·) and E(·, 0), both of which are easily solved. E(0, j) is the
present situation, these are E(0, ·) and E(·, 0), both of which are easily solved. E(0, j) is the
editL’algorithme
distance between dethecalcul deprefix
0-length of x, namely
la distance the empty string, and the first j letters
d’édition
edit distance between the 0-length prefix of x, namely the empty string, and the first j letters
of y: clearly, j. And similarly, E(i, 0) = i.
of y: clearly, j. And similarly, E(i, 0) = i.
At this point, the algorithm for edit distance basically writes itself.
At this point, the algorithm for edit distance basically writes itself.
for i = 0, 1, 2, . . . , m:
for i = 0, 1, 2, . . . , m:
E(i, 0) = i
E(i, 0) = i
for j = 1, 2, . . . , n:
for j = 1, 2, . . . , n:
E(0, j) = j
E(0, j) = j
for i = 1, 2, . . . , m:
for i = 1, 2, . . . , m:
for j = 1, 2, . . . , n:
for j = 1, 2, . . . , n:
E(i, j) = min{E(i − 1, j) + 1, E(i, j − 1) + 1, E(i − 1, j − 1) + diff(i, j)}
E(i, j) = min{E(i − 1, j) + 1, E(i, j − 1) + 1, E(i − 1, j − 1) + diff(i, j)}
return E(m, n)
return E(m, n)
This procedure fills in the table row by row, and left to right within each row. Each entry takes
This procedure fills in the table row by row, and left to right within each row. Each entry takes
constant
a time
Onconstant to fill in, so the overall running time is just the size of the table, O(mn).
time to fill
une solution enin, so the overall running time is just the size of the table, O(mn).
O(mn).
And in our example, the edit distance turns out to be 6:
Pour And in our example,etthe
EXPONENTIAL edit distance turns
POLYNOMIAL out to be
on trouve 6: 10] = 6 :
E [11,
E X P O N E N − T I A L
E X P O N E N − T I A L
− − P O L Y N O M I A L
− − P O L Y N O M I A L

Exercice 4.10
Quelle est la complexité en espace de cet algorithme de PrDy ?

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 143 / 201
Programmation Dynamique Alignement de séquences/Distance d’édition (déjà vu dans le module AGR1)

S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani


Un problème de graphe
Figure 6.5 The underlying dag, and a path of length 6.

P O L Y N O M I A L

E
X
P
On convient que les flèches poin- O
tillées coûtent 0 (cas x[i] = y [j]), N
et que les flèches pleines vallent 1. E
N
T
I
A
L

Exercice 4.11
The underlying dag
Reprendre le tout en paramétrant les coûts des trois opérations d’édition.
Every dynamic program has an underlying dag structure: think of each node as representin
subproblem, and each edge as a precedence constraint on the order in which the subprobl
can be tackled. Having nodes u1 , . . . , uk point to v means “subproblem v can only be so
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 144 / 201
Programmation Dynamique Limitations de la Programmation Dynamique

Limitations de la Programmation Dynamique

On considère le problème suivant :

Problème 21 (Longest Simple Path)


Entrée : Un graphe pondéré G = (V , E ) et deux sommets s et t.
Sortie : Le chemin élémentaire de s à t de poids maximum.

On définit LP[i, j] comme la valeur du plus long chemin élémentaire de i à j. Le dernier


arc visité est de la forme (x, j), et de coût c(x, j), ce qui suggère naı̈vement

LP[i, j] = max(x,j)∈E LP[i, x] + c(x, j)

Mais comment garantit-on que la valeur LP[i, x] ne correspond pas à une sous-solution
où j est dans le plus long chemin élémentaire de i à x ?
Aussi, quel ordre d’évaluation appliquer entre les différents sous-problèmes ?

Dans ce cas, il faut non seulement garantir le principe d’optimalité, mais la nature même
des sous-solutions optimales intervient dans ce calcul, et pas seulement leur coût.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 145 / 201
Programmation Dynamique Limitations de la Programmation Dynamique

Quand la programmation dynamique est-elle efficace/inefficace ?

La complexité d’un algorithme de PrDy repose sur trois choses :


1 pour le temps,
1 le nombre de sous-problèmes à évaluer
2 le temps nécessaire pour évaluer chaque sous-problème, et
2 pour l’espace, le nombre de sous-problèmes dont il faut garder trace à chaque étape.
En général c’est 1. qui est critique.
Dans le cas du Longest Simple Path, on pourrait choisir les sous-problèmes qui
consistent en un chemin P entre deux sommets : LP[i, j, P] dénote le plus long chemin
élémentaire entre i et j, où P est la séquence exacte des sommets intermédiaires entre i
et j (exclu) sur ce chemin.

LP[i, j, P.x0 ] = max(x,j)∈E ,x,j ∈P


/ LP[i, x, P] + c(x, j)

où x0 = argmax(x,j)∈E ,x,j ∈P


/ LP[i, x, P] + c(x, j).
Cette formulation est correcte, mais malheureusement les chemins P sont en grand
nombre, et on n’obtient pas un nombre polynomial de sous-problèmes.

Exercice 4.12
Combien y a-t-il de sous-problèmes ?
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 146 / 201
Théorie de la NP-complétude

Table des Matières

1 Rappels : Fonctions et Ordres de grandeurs

2 Diviser pour Régner

3 Approches Gloutonnes

4 Programmation Dynamique

5 Théorie de la NP-complétude
Réductions polynomiales
Packing and covering problems
Constraint satisfaction problems
Sequencing problems
Graph coloring
P versus NP
NP-complétude

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 147 / 201
Théorie de la NP-complétude Réductions polynomiales

Modèles et anti-modèles d’algorithmes

Modèles d’algorithmes
Gloutons
Diviser pour Régner
Programmation dynamique
Programmation linéaire, Dualité
Réductions
Anti-modèles d’algorithmes
NP-complétude d’un problème : Sans doute pas d’algorithme en temps polynomial.
Exercice 5.1
Vous en connaissez ?
PSPACE-complétude d’un problème : Sans doute pas d’algorithme de certification
en O(nk )

Exercice 5.2
Vous en connaissez ?
Indécidabilité d’un problème : Pas d’algorithme pour le résoudre
Exercice 5.3
Vous en connaissez ?
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 148 / 201
Théorie de la NP-complétude Réductions polynomiales

Classification des problèmes en fonction de leurs exigences calculatoires

Q :Quels problèmes serons-nous capables de résoudre en pratique ?


Une définition qui marche : Ceux qui ont des algorithmes polynomiaux

Au niveau théorique : Définition vaste et robuste

Exercice 5.4
Pourquoi ?

Au niveau pratique : Les algorithmes polynomiaux qui passent à l’échelle

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 149 / 201
Théorie de la NP-complétude Réductions polynomiales

Classification des problèmes en fonction de leurs exigences calculatoires

Q :Quels problèmes serons-nous capables de résoudre en pratique ?


Une définition qui marche : Ceux qui ont des algorithmes polynomiaux

Au niveau théorique : Définition vaste et robuste

Exercice 5.4
Pourquoi ?

Au niveau pratique : Les algorithmes polynomiaux qui passent à l’échelle

algo polynomial sans doute pas d’algo polynomial


plus court chemin plus long chemin
2SAT 3SAT
4-coloration planaire 3-coloration planaire
couverture de sommets bipartite couverture de sommets
matching 3D-matching
test de primalité factorisation
programmation lineaire programmation entière

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 149 / 201
Théorie de la NP-complétude Réductions polynomiales

Desiderata

Classifier les problèmes en séparant ceux qui peuvent être résolus en temps polynomial
(faciles à résoudre) et ceux qui ne le peuvent pas – en anglais ces derniers sont dits
intractable.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 150 / 201
Théorie de la NP-complétude Réductions polynomiales

Desiderata. Classify problems according to those that can be solve


Desiderata
polynomial time and those that cannot.
Classifier les problèmes en séparant ceux qui peuvent être résolus en temps polynomial
(faciles à résoudre) et ceux qui ne le peuvent pas – en anglais ces derniers sont dits
input size =
intractable.
Provably requires exponential time.
・Étant
Ceux qui ont une preuve qu’il leur faut un temps exponentiel. Par exemple :
Given a constant-size program, does it halt in at most k steps?
・s’arrête-t-il
donné un programme (ou algorithme, ou Machine de Turing déterministe),
Given a en board
au plusposition
k étapes ?in an n-by-n generalization of checkers,
can donné
Étant blackune
guarantee
position suraunwin?
échiquer n × n de dames, les noirs ont-ils une
stratégie gagnante ? using forced

Frustrating news. Huge number of fundamental problems have def


S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 150 / 201
Théorie de la NP-complétude Réductions polynomiales

Desiderata. Classify problems according to those that can be solve


Desiderata
polynomial time and those that cannot.
Classifier les problèmes en séparant ceux qui peuvent être résolus en temps polynomial
(faciles à résoudre) et ceux qui ne le peuvent pas – en anglais ces derniers sont dits
input size =
intractable.
Provably requires exponential time.
・Étant
Ceux qui ont une preuve qu’il leur faut un temps exponentiel. Par exemple :
Given a constant-size program, does it halt in at most k steps?
・s’arrête-t-il
donné un programme (ou algorithme, ou Machine de Turing déterministe),
Given a en board
au plusposition
k étapes ?in an n-by-n generalization of checkers,
can donné
Étant blackune
guarantee
position suraunwin?
échiquer n × n de dames, les noirs ont-ils une
stratégie gagnante ? using forced

Nouvelle frustrante Un nombre gigantesque de problèmes fondamentaux défient la


classfication
Frustrating depuis des décennies.
news. Huge number of fundamental problems have def
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 150 / 201
Théorie de la NP-complétude Réductions polynomiales

Mais d’ailleurs c’est quoi un “problème” ?

Définition 38
Un problème (de décision) X est une question oui/non sur des entrées.

le nom du problème
Entrée : les données d’entrée, qu’on appelle instance
Sortie : la question posée

Par exemple :
Le graphe est-il Hamiltonien ?
Cette formule propositionnelle est-elle satifaisable ?
Le sac à dos peut-il être rempli avec un profit d’au moins k ?

On confond X avec l’ensemble de ses entrées pour lesquelles la réponse est oui.
On appelle ces instances des instances positives de X .
On notera I ∈ X pour indiquer que I est une instance positive de X , et I ∈/ X sinon.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 151 / 201
Théorie de la NP-complétude Réductions polynomiales

Réduction polynomiales

Desiderata Supposons que l’on sait résoudre un problème donné Y en temps polynomial.
Que pourrions-nous résoudre d’autre en temps polynomial ?

Définition 39 (Réduction “à la Karp”)


Le problème X se réduit au problème Y , noté X ≤P Y , s’il existe une fonction effective
r (.) qui transforme toute instance I de X en une instance r (I ) de Y en temps polynomial
de sorte que
I ∈ X si, et seulement si, r (I ) ∈ Y
On remarque que forcément |r (I )| ≤ p(|I |) pour un certain polynôme p(.).

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 152 / 201
Théorie de la NP-complétude Réductions polynomiales

Réductions polynomiales

La notion de réduction polynomial permet de classifier les problèmes en fonction de leur


difficulté relative.
Théorème 40 (Conception d’algorithmes)
Si X ≤P Y et Y peut être résolu en temps polynomial, alors X peut être résolu en temps
polynomial.

Théorème 41 (Établir l’intractabilité)


Si X ≤P Y et X ne peut pas être résolu en temps polynomial, alors Y ne peut pas être
résolu en temps polynomial.

Définition 42
On note X ≡P Y lorsque X ≤P Y et Y ≤P X

Théorème 43
Si X ≡P Y , alors
X peut être résolu en temps polynomial ssi Y peut être résolu en temps polynomial.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 153 / 201
Théorie de la NP-complétude Packing and covering problems

Packing and covering problems

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 154 / 201
Théorie de la NP-complétude Packing and covering problems
ertices S ⊆ V such that | S | ≥ k, and for each edge at most one of its
Independent Set
points is in S ?

s there an independent
Independent-Set setdonné
Étant of size ≥ 6 ? G = (V , E ) et un entier k, existe-t-il un
un graphe
sous-ensemble
s there de sommets
an independent ⊆ size
setI of 7 ? |I | ≥ k et qu’aucune paire de sommets dans I
V tel≥que
n’est reliée par un arc (Autrement dit, pour tous u, v ∈ I , (u, v ) ∈
/ E) ?

independent set of size 6

11

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 155 / 201
-COVER. Given a graph G =Théorie
(V, E) and an integer
de la NP-complétude
k, is there a subset of
Packing and covering problems
s S ⊆ V such that | S | ≤ k, and for each edge, at least one of its
Vertex Cover (couverture de sommets)
ints is in S ?

there a vertex cover


Vertex-Cover of donné
Étant size ≤ un
4 ? graphe G = (V , E ) et un entier k, existe-t-il un
there a vertex cover
sous-ensemble of sizeS ≤⊆3V? tel que |S| ≤ k et pour chaque arc, au moins une des
de sommets
deux extrémités est dans S (Autrement dit, pour tous (u, v ) ∈ E , u ∈ S ou v ∈ S) ?

independent set of size 6

vertex cover of size 4

12

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 156 / 201
oints is in S ?
Théorie de la NP-complétude Packing and covering problems

s there a vertex cover of size ≤ 4 ?


Vertex Cover et Independent Set se réduisent l’un à l’autre
s there a vertex cover of size ≤ 3 ?

independent set of size 6

vertex cover of size 4

12

Théorème 44
Vertex-Cover ≡P Independent-Set

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 157 / 201
oints is in S ?
Théorie de la NP-complétude Packing and covering problems

s there a vertex cover of size ≤ 4 ?


Vertex Cover et Independent Set se réduisent l’un à l’autre
s there a vertex cover of size ≤ 3 ?

independent set of size 6

vertex cover of size 4

12

Théorème 44
Vertex-Cover ≡P Independent-Set

Démonstration.
Elle repose sur le fait suivant.
S est un Vertex Cover de cardinal k ssi V \ S est un Independent Set de cardinal n − k.

Exercice 5.5
Terminer la preuve du Théorème 44.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 157 / 201
Théorie de la NP-complétude Packing and covering problems

Vertex Cover ≤P Programmation Linéaire en Nombres Entiers (PLNE)

Étant donné un graphe G = (V , E ) et un entier k, on introduit l’ensemble de variables


X = {xv | v ∈ V }, avec l’interprétation que si xv = 1, alors le sommet v est choisi dans le
Vertex Cover, sinon xv = 0.
On considère alors le systèmes EG d’inéquations suivant.

 P

 v ∈V xv ≤ k



EG xu + xv ≥ 1 (u, v ) ∈ E




xv ∈ {0, 1} v ∈V

Théorème 45
P
G a un Vertex Cover S de taille k ssi EG a une solution telle que v ∈V xv = k.

Exercice 5.6
Établir le Théorème 45.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 158 / 201
Théorie de la NP-complétude Packing and covering problems
nion is equal to U ?
Set Cover

ample application.
Set-Cover Étant donné un ensemble U = {1, 2, . . . , n} d’éléments, une collection

・ensembles
S = {S1 , S2 , . . . , Sm } de sous-ensembles de U, et un entier k, existe-t-il au plus k
m availablede S pieces of est
dont l’union software.
égale à U ?
・ Set U
Exemples of n capabilities
d’application that we would like our system to have.
・TheUi unpiece
m thmodules logiciels.
of software provides the set S ⊆ U of capabilities.
ensemble de n fonctionnalités que vous aimeriezi que votre système ait.
・Goal: achieve
Le ième moduleall n capabilities
fournit l’ensemble S ⊆ using fewest pieces of software.
U de fonctionnalités. i
But : réaliser les n fonctionnalités en utilisant le moins de modules possible.

U = { 1, 2, 3, 4, 5, 6, 7 }
S1 = { 3, 7 } $ $ S4 = { 2, 4 }
S2 = { 3, 4, 5, 6 }$ S5 = { 5 }
S3 = { 1 }$$ $ S6 = { 1, 2, 6, 7 }
k=2

a set cover instance

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 159 / 201
Theorem. VERTEX-COVER Théorie
≤ P SdeETla-C OVER.
NP-complétude Packing and covering problems

Vertex
Pf. Cover
Given se réduit
a VERTEX-COVERàinstance
Set Cover
G = (V, E), we construct a SET-COVER
instance (U, S) that has a set cover of size k iff G has a vertex cover of size k.
Théorème 46
Vertex-Cover ≤P Set-Cover
Construction.
・ Universe U = E.

Démonstration.
Include one set for each node v ∈ V : S = {e ∈ E : e incident to v }.
Étant donnée une instance G = (V , E ) (et k) dev Vertex-Cover, on construit
l’instance (U, S, k) de Set-Cover de taille polynomial en la taille de G .

a b

e7 e2 e4 U = { 1, 2, 3, 4, 5, 6, 7 }
e3
Sa = { 3, 7 } ! ! Sb = { 2, 4 }
f e6 c
Sc = { 3, 4, 5, 6 }! Sd = { 5 }
e1 e5
k=2 Se = { 1 }! ! ! Sf = { 1, 2, 6, 7 }
e d

vertex cover instance set cover instance


(k = 2) (k = 2)
17

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 160 / 201
Théorie de la NP-complétude Packing and covering problems
Vertex cover reduces to set cover
Vertex Cover se réduit à Set Cover
Lemma. G = (V, E) contains a vertex cover of size k iff (U, S) contains a set
Théorème 46
cover of size k.
Vertex-Cover ≤P Set-Cover

Pf. ⇒ Let X ⊆ V be a vertex cover of size k in G.


Démonstration.

Étant Then
donnée
Y =une v : v ∈ X } is a set cover of size k. ▪
{ Sinstance G = (V , E ) (et k) de Vertex-Cover, on construit
l’instance (U, S, k) de Set-Cover de taille polynomial en la taille de G .

Lemme 47
G a un Vertex Cover de taille k ssi (U, S) a un Set Cover de taille k.

a b

e7 e2 e4 U = { 1, 2, 3, 4, 5, 6, 7 }
e3
Sa = { 3, 7 } ! ! Sb = { 2, 4 }
f e6 c
Sc = { 3, 4, 5, 6 }! Sd = { 5 }
e1 e5
k=2 Se = { 1 }! ! ! Sf = { 1, 2, 6, 7 }
e d

vertex cover instance set cover instance


(k = 2) (k = 2)
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 160 / 201
Théorie de la NP-complétude Packing and covering problems

Set Cover ≤P Programmation Linéaire en Nombres Entiers (PLNE)

Étant donnée une instance de Set Cover, (U, S) et k, on introduit l’ensemble de variables
X = {xj | Sj ∈ S}, avec l’interprétation que si xj = 1, alors l’ensemble Sj est choisi dans
le Set Cover, sinon xj = 0.
On considère alors le systèmes E(U,S) d’inéquations suivant.

 Pm

 j=1 xj ≤ k


 P
E(U,S) { j | i∈Sj xj ≥ 1}i∈U




{xj ∈ {0, 1}}j∈{1,...m}

Théorème 48
(U, S) et k est une instance positive de Set Cover ssi E(U,S) a une solution telle que
P m
j=1 xj = k.

Exercice 5.7
Établir la preuve du Théorème 48.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 161 / 201
Théorie de la NP-complétude Constraint satisfaction problems

Constraint satisfaction problems

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 162 / 201
Théorie de la NP-complétude Constraint satisfaction problems

Clause. A disjunction of literals.


Satisfaisabilité C j = x1 ∨ x2 ∨ x

Conjunctive normal form. A propositional Φ = C1 ∧ C ∧ x¯C
Littéral Une variable booléenne ou sa négation xi 2ou i 3
formula Φ that is the conjunction of clauses. €
Clause Une disjonction de littéraux Cj = x1 ∨ x¯2 ∨ x3
Forme normale conjonctive (FNC) φ = C1 ∧ C2 ∧ C3 ∧ C4
SATUne
. Given
formule CNF formulaφΦ,
propositionnelle quidoes
est uneitconjonction
have a satisfying
€clauses truth assignment?
de
3-SSAT
AT. Étant
SAT donnée
whereune
each clause
formule contains
φ en FNC, a-t-elleexactly
un modèle3? literals
3-SAT Le même problème que SAT mais que pour ds instances de formules en FNC où
(and each literal corresponds to a different variable).
des clauses ont exactement 3 littéraux.

Φ = ( x1 ∨ x2 ∨ x 3 ) ∧ ( x1 ∨ x2 ∨ x 3 ) ∧ ( x1 ∨ x2 ∨ x 4 )

yes instance: x1 = true, x2 = true, x3 = false, x4 = false


Key application.
Application Electronic
clé Electronic design automation
design automation (EDA). (EDA).

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 163 / 201
Theorem. 3-SAT ≤ P IThéorie
NDEPENDENT-SET.
de la NP-complétude Constraint satisfaction problems

se réduit
Pf. Given
3-SAT à Independent
an instance Φ of 3-SSet
AT, we construct an instance (G, k) of
INDEPENDENT-SET that has an independent set of size k iff Φ is satisfiable.
Théorème 49
≤P Independent-Set
Construction.
3-SAT

G contains 3 nodes for each clause, one for each literal.

Démonstration.
Connect 3 literals in a clause in a triangle.

G contient 3 sommets pour chaque clause, un pour chacun de ses littéraux ;
Connect
On connecte ces 3 literal topar
littéraux each
un of its negations.
triangle ;
On connecte chaque littéral à sa négation.

k=3
Φ = ( x1 ∨ x2 ∨ x 3 ) ∧ ( x1 ∨ x2 ∨ x 3 ) ∧ ( x1 ∨ x2 ∨ x 4 )

S. Pinchinat (IRISA, €
Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 164 / 201
Théorie de la NP-complétude Constraint satisfaction problems

3-SAT se réduit à Independent Set


Construction.
・G contains 3 nodes for each clause, one for each literal.

Théorème 49
Connect 3 literals in a clause in a triangle.

3-SAT ≤P Independent-Set
Connect literal to each of its negations.
Démonstration.

k=3
Φ = ( x1 ∨ x2 ∨ x 3 ) ∧ ( x1 ∨ x2 ∨ x 3 ) ∧ ( x1 ∨ x2 ∨ x 4 )

Lemme 50

Soit k le nombre de clauses de φ. Alors, G admet un Independent Set de taille k ssi φ est
satisfaisable.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 164 / 201
Théorie de la NP-complétude Constraint satisfaction problems

Compte rendu

Stratégies de base de réduction


Équivalences simples : Vertex-Cover ≡P Independent-Set
D’un cas particuler à un cas plus général : Vertex-Cover ≤P Set-Cover
Encodage à l’aide de gadgets : 3-SAT ≤P Independent-Set

Lemme 51 (Transitivité de ≤P )
Si X ≤P Y et Y ≤P Z , alors X ≤P Z .

Démonstration.
On compose les deux réductions

Exemple
3-SAT ≤P Independent-Set ≤P Vertex-Cover ≤P Set-Cover

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 165 / 201
Théorie de la NP-complétude Constraint satisfaction problems

Problèmes de recherche d’une solution

Problèmes de décision Existe-t-il un vertex cover de taille ≤ k ? (Vertex-Cover)


Problèmes de recherche d’une solution Trouver un vertex cover de taille ≤ k
(Find-Vertex-Cover).

Exemple Pour trouver un vertex cover de taille ≤ k :


1 Déterminer s’il existe un vertex cover de taille ≤ k.
2 Si oui, trouver un sommet v tel que G \ {v } a un vertex cover de taille ≤ k − 1
(récursivement).
(tout sommet v d’un Vertex Cover de taille k est tel que G \ {v } a un Vertex Cover
de taille ≤ k − 1).
Inclure v dans le Vertex Cover de taille k − 1 de G \ {v }.
Sinon répondre qu’il n’y a pas de solution.

Bilan Vertex-Cover et Find-Vertex-Cover ont la même complexité

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 166 / 201
Théorie de la NP-complétude Constraint satisfaction problems

Problèmes de recherche d’une solution

Problèmes de décision Existe-t-il un vertex cover de taille ≤ k ? (Vertex-Cover)


Problèmes de recherche d’une solution Trouver un vertex cover de taille ≤ k
(Find-Vertex-Cover).
Problèmes d’optimisation Trouver un vertex cover de taille minimum
(Minimum-Vertex-Cover).

Exemple Pour trouver un vertex cover de taille minimum :


Recherche (dichotomique) pour la taille k ∗ du minimum vertex cover
Résoudre le problème de recherche associé.

Bilan Vertex-Cover et Find-Vertex-Cover ont la même complexité, et qui est la


même que celle de ≡P Minimum-Vertex-Cover

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 166 / 201
Théorie de la NP-complétude Sequencing problems

Sequencing problems

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 167 / 201
Théorie de la NP-complétude Sequencing problems

Hamilton
Cycle cycle
Hamiltonien

HAM-CYCLE. Given
Ham-Cycle Étantan undirected
donné graph
un graphe G does
G = (V, E),
non-dirigé = (Vthere exist a simple
, E ), existe-t-il un cycle
cycle Γ that dont
élémentaire contains every node
les sommets in V ?V ?
forment

yes
28

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 168 / 201
Théorie de la NP-complétude Sequencing problems
amilton cycle
Cycle Hamiltonien
AM-CYCLE. Given an undirected graph G = (V, E), does there exist a simple
ycleHam-Cycle
Γ that contains every
Étant node
donné uningraphe
V ? non-dirigé G = (V , E ), existe-t-il un cycle
élémentaire dont les sommets forment V ?

1 1'

2 2'

3 3'

4 4'

no
29

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 168 / 201
Théorie de la NP-complétude Sequencing problems
Directed hamilton cycle reduces to hamilton cycle
Cycle Hamiltonien Dirigé se réduit à Cycle Hamiltonien
DIR-HAM-CYCLE: Given a digraph G = (V, E), does there exist a simple directed
Dir-Ham-Cycle Étant donné un graphe (dirigé) G = (V , E ), existe-t-il un cycle
cycle Γ that contains every node in V ?
élémentaire dont les sommets forment V ?
Théorème 52
Theorem. DIR-HAM-CYCLE ≤ P HAM-CYCLE.
Dir-Ham-Cycle ≤P Ham-Cycle
Pf. Given a digraph G = (V, E), construct a graph G' with 3n nodes.
Démonstration.
Étant donné G = (V , E ) on construit G 0 à 3n sommets.

aout
a din
d
b v
bout vin v vout
e
c
ein
cout
G G'

Lemme 53
30
G a un cycle Hamiltonien dirigé ssi G 0 a un cycle Hamiltonien.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 169 / 201
Théorie de la NP-complétude Sequencing problems

3-satisfaisabilité se réduit à Cyle Hamiltonien Dirigé

Théorème 54
3-SAT ≤P Dir-Ham-Cycle
3-satisfiability reduces to directed hamilton cycle

Construction. Given 3-SAT instance Φ with n variables xi and k clauses.


Démonstration.
・Construct G to have 2n Hamilton cycles. n
・Intuition:
On crée d’abord unpath
traverse graphe ayant
i from left 2 ⇔cycles
to right Hamiltoniens
set variable xi = true. qui correspondent aux 2n
valuations possibles des variables de φ.
s

x1

x2

x3

33
3k + 3

Intuition : dans un cycle associé à une valuation ν, on traverse horizontalement l’étage i


de gauche à droite ssi ν(xi ) = true. Puis ...
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 170 / 201
Théorie de la NP-complétude Sequencing problems

3-satisfaisabilité se réduit à Cyle Hamiltonien Dirigé

3-satisfiability
Théorème 54 reduces to directed hamilton cycle
3-SAT ≤P Dir-Ham-Cycle
Construction. Given 3-SAT instance Φ with n variables xi and k clauses.
・For each clause, add a node and 6 edges.
Démonstration.

C 1 = x1 x2 x3 clause node 1 clause node 2 C 2 = x1 x2 x3

x1

x2

x3

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020


34 170 / 201
Théorie de la NP-complétude Sequencing problems

3-satisfaisabilité se réduit à Longest Path

Longest-Path Étant donné un graphe non-dirigé G = (V , E ), existe-t-il un chemin


élémentaire de longueur au moins k ?

Théorème 55
3-SAT ≤P Longest-Path

Démonstration.
Preuve 1 Refaire la preuve pour Dir-Ham-Cycle, en ignorant l’arc de retour de t à s.
Preuve 2 Montrer que Ham-Cycle ≤P Longest-Path

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 171 / 201
Théorie de la NP-complétude Sequencing problems

veling salesperson
Problème problemde commerce/Travelling Salesperson problem
du voyageur
Given a set of n cities and a pairwise distance function d(u, v),
TSP Étant donné un ensemble de n villes, une distance d(u, v ) entre chaque ville, et un
hereentier
a tour
k,of length ≤une
existe-t-il D ? tournée de longueur ≤ k ?

13,509 cities in the United States


http://www.tsp.gatech.edu 38

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 172 / 201
Théorie de la NP-complétude Sequencing problems

Problème
veling du voyageur
salesperson problem de commerce/Travelling Salesperson problem

Given
TSPaÉtant
set ofdonné
n citiesun
and a pairwise
ensemble de distance function
n villes, une d(u, v),
distance d(u, v ) entre chaque ville, et un
hereentier
a tourk,ofexiste-t-il
length ≤ D ? tournée de longueur ≤ k ?
une

optimal TSP tour


http://www.tsp.gatech.edu 39

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 172 / 201
Théorie de la NP-complétude Sequencing problems

aveling salesperson
Problème problem
du voyageur de commerce/Travelling Salesperson problem

SP. TSP
GivenÉtant
a set donné
of n cities and a pairwise
un ensemble distance
de n villes, une function d(u, v),
distance d(u, v ) entre chaque ville, et un
there a tour
entier of lengthune
k, existe-t-il ?
≤ D tournée de longueur ≤ k ?

11,849 holes to drill in a programmed logic array


http://www.tsp.gatech.edu 40

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 172 / 201
Théorie de la NP-complétude Sequencing problems

Problème du voyageur de commerce/Travelling Salesperson problem


aveling salesperson problem

GivenÉtant
SP. TSP donné
a set of un and
n cities ensemble de n distance
a pairwise villes, une distance
function d(u,d(u,
v), v ) entre chaque ville, et un
entier
there k, existe-t-il
a tour D ?tournée de longueur ≤ k ?
of length ≤une

optimal TSP tour


http://www.tsp.gatech.edu 41

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 172 / 201
Théorie de la NP-complétude Sequencing problems

Cycle Hamiltonien se réduit à TSP

TSP Étant donné un ensemble de n villes et une distance d(u, v ) entre chaque ville, , et
un entier k, existe-t-il une tournée de longueur ≤ k ?
Ham-Cycle Étant donné un graphe non-dirigé G = (V , E ), existe-t-il un cycle
élémentaire dont les sommets forment V ?

Théorème 56
Ham-Cycle ≤P TSP

Démonstration.
Étant donné G = (V , E ) une instance de Ham-Cycle, on crée n villes avec la fonction
de distance 
0 if (u, v ) ∈ E
d(u, v ) =
1 if (u, v ) ∈
/E

Lemme 57
Cette instance de TSP admet une tournée de longueur 0 ssi G a un cyle Hamiltonien.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 173 / 201
Théorie de la NP-complétude Sequencing problems

Polynomial-time
Réductions reductions
polynomiales

constraint satisfaction

3-SAT
es
uc
red ET
e S
im T-
t N
ly- DE
T
po EPEN
D
3 -SA IN
to

INDEPENDENT-SET DIR-HAM-CYCLE GRAPH-3-COLOR SUBSET-SUM

VERTEX-COVER HAM-CYCLE PLANAR-3-COLOR SCHEDULING

SET-COVER TSP

packing and covering sequencing partitioning numerical


S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 174 / 201
Théorie de la NP-complétude Graph coloring

Graph coloring

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 175 / 201
Théorie de la NP-complétude Graph coloring

3-coloration
OR. Given an undirected graph G, can the nodes be colored red, green,
lue so that no adjacent nodes have the same color?
3-Color Étant donné un graphe non-dirigé, peut-on colorier les sommets en rouge, vert
et bleu de sorte que deux sommets adjacents aient des couleurs disjointes ?

yes instance

56

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 176 / 201
Théorie de la NP-complétude Graph coloring
rference graph. Nodes are program variables names; edge between
Application : allocation de registres
nd v if there exists an operation where both u and v are "live" at the
me time.
Allocation de registres (K-Register-Allocation) On se donne un entier k et un
programme. Assigner les variables d’un programme à au plus k registres de sorte que
servation. [Chaitin
deux variables utilisées 1982]
au même Can solve
moment register
ne soient allocation
pas assignées problem
au même iff
registre (p.
ex. print(x + y )).
rference graph is k-colorable.
Graphe d’inférence Les sommets sont les variables du programme, et il y a un arc entre x
et y ssi les variables x et y sont “vivantes” au même moment.
t. Observation
3-COLOR ≤[Chaitin
P K-REGISTER
1982] On-A LLOCATION
peut for
résoudre le any constant
problème d’allocationkde≥ registres
3. ssi le
graphe d’inference est k-coloriable.

Fait 3-Color ≤P K-Register-Allocation pour toute constant k ≥ 3.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 177 / 201
Théorie de la NP-complétude Graph coloring

3-satisfaisabilité se réduit à 3-coloriage


Construction.
(i) Create a graph G with a node for each literal.
Théorème 58
(ii) Connect each literal to its negation.
3-SAT ≤P 3-Color
(iii) Create 3 new nodes T, F, and B; connect them in a triangle.
(iv) Connect each literal to B.
Démonstration.
(v) OnFor
(i) each
crée clause C
un sommet j, add
pour a gadget
chaque littéralof 6 nodes and 13 edges.
(ii) On connecte chaque littéral à sa négation.
(iii) On crée 3 sommets T , F , B, connectés en triangle
to be described later
(iv) On connecte chaque sommets de littéral (gris) à B
(v) Pour chaque clause Cj on ajoute un gadget à 6 sommets et 13 arcs (voir + loin).
true false

T F

base B

59

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 178 / 201
(iv) Connect each literalThéorie
to deB.la NP-complétude Graph coloring

(v) For each clause


3-satisfaisabilité Cj, addàa3-coloriage
se réduit gadget of 6 nodes and 13 edges.

to be described later

Démonstration.
true false

T F

base B

59

Lemme 58
Si G est 3-coloriable alors φ est satisfaisable.

La valuation qui met à vrai les sommets coloriés en vert est un modèle de φ.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 178 / 201
Théorie de la NP-complétude Graph coloring

Lemma. Graph G is 3-colorable iff Φ is satisfiable.


3-satisfaisabilité se réduit à 3-coloriage
Pf. ⇒ Suppose graph G is 3-colorable.
・Consider assignment that sets all T literals to true.
・(iv) ensures each literal is T or F.
Démonstration.

Lemme・58(ii) ensures a literal and its negation are opposites.


・(v)
Si G est ensures at
3-coloriable least
alors φ one literal in each clause is T.
est satisfaisable.

La valuation qui met à vrai les sommets coloriés en vert est un modèle de φ.
B

C j = x1 ∨ x2 ∨ x3

6-node gadget

true T F false

61

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 178 / 201
3-satisfiability reduces tode3-colorability
Théorie la NP-complétude Graph coloring

3-satisfaisabilité se réduit à 3-coloriage


Lemma. Graph G is 3-colorable iff Φ is satisfiable.

Pf. ⇒ Suppose graph G is 3-colorable.



Démonstration.
Consider assignment that sets all T literals to true.
Lemme・58 (iv) ensures each literal is T or F.

Si G est (ii) ensures aalors
3-coloriable literal andsatisfaisable.
φ est its negation are opposites.
・(v) ensures at least one literal in each clause is T.
La valuation qui met à vrai les sommets coloriés en vert est un modèle de φ.
G not 3-colorable if
literal nodes all are red
B

C j = x1 ∨ x2 ∨ x3

contradiction

true T F false

62

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 178 / 201
Théorie de la NP-complétude Graph coloring

3-satisfaisabilité
3-satisfiability se réduittoà3-colorability
reduces 3-coloriage

Démonstration.
Lemma. Graph G is 3-colorable iff Φ is satisfiable.

Lemme 58
Si φPf.
est ⇐ Suppose 3-SAT instance Φ is satisfiable.
satisfaisable alors G est 3-coloriable.
・Color all true literals T.
・Color
Colorier tous les littéraux
node belowvrais
greenen node
vert F, and node below that B.
・Color remaining middle row nodes B.
Colorier les sommets sous les verts en rouge, et ceux dessous en bleu.

・Color
Colorier les sommets restants de la colonne centrale en bleu.
remaining bottom nodes T or F as forced. ▪
Colorier les sommets du bas restants en vert ou rouge selon les contraintes.

a literal set to true


in 3-SAT assignment
B

C j = x1 ∨ x2 ∨ x3

true T F false

63

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 178 / 201
Théorie de la NP-complétude Graph coloring

Karp's
Les 2121 NP-complete
problèmes problems de Karp
NP-complets

Dick Karp (1972)


1985 Turing Award

76

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 179 / 201
Théorie de la NP-complétude P versus NP

P vs. NP

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 180 / 201
Théorie de la NP-complétude P versus NP

Problèmes de décision

Définition 59 (Problèmes de décision)


Un problème X est un ensemble d’instances.
On dit que l’algorithme A résout le problème X lorsque A(I ) retourne “oui” ssi I ∈ X

Définition 60
L’algorithme A s’exécute en temps polynomial s’il existe p(.) un polynôme tel que pour
instance I , A(I ) termine en au plus p(|I |) “étapes”.

Exemple 61
Le problème Primes= {2, 3, 5, 7, 11, 13, 17, 23, 29, 31, 37, . . .}
Instance I = 592335744548702854681.
L’algorithme AKS résout Primes en O(|I |8 ) étapes.
Agrawal, Kayal, et Saxena ont eu le Gödel Prize 2006 et le Fulkerson Prize 2006 pour leur
conception de l’algorithme AKS.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 181 / 201
Théorie de la NP-complétude P versus NP

Définition de la classe de complexité P


Definition of P

Définition 62
P. Decision problems for which there is a poly-time algorithm.
La classe P est celles des problèmes de décision pour lesquels il existe un algorithme
polynomial.

Problem Description Algorithm yes no

MULTIPLE Is x a multiple of y ? grade-school division 51, 17 51, 16

REL-PRIME Are x and y relatively prime ? Euclid (300 BCE) 34, 39 34, 51

PRIMES Is x prime ? AKS (2002) 53 51

Is the edit distance between dynamic niether acgggt


EDIT-DISTANCE neither ttttta
x and y less than 5 ? programming
# 0 1 1& # 4 & " 1 0 0 % "1%
Is there a vector x that Gauss-Edmonds
L-SOLVE
% ( % ( $ ' $ '
% 2 4 −2 ( , % 2 ( $ 1 1 1' , $1'
satisfies Ax = b ? elimination %$ 0 3 15 (' %$36 (' $#0 1 1'& $#1&'

Is there a path between s depth-first search


ST-CONN (Theseus)
€ €
and t in a graph G ?
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 182 / 201
Théorie de la NP-complétude P versus NP

Certifieurs et Certificats : nombre composite

Composites Étant donné un entier, est-il composé (c-à-d. non premier) ?


Certificat. Un facteur non trivial p de n existe ssi n est composé. De plus, p ≤ n.
Pour savoir si n est composé, il suffit d’engendrer p ≤ n de façon non-déterministe puis
de certifier :
Certifier. C’est vérifier que p divise n.un multiple de p.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 183 / 201
Théorie de la NP-complétude P versus NP
3-SAT. Given a CNF formula Φ, is there a satisfying assignment?
Certifieurs et Certificats : Satisfaisabilité

Certificate. An assignment of truth values to the n boolean variables.

Certifier.
SAT Check une
Étant donnée thatformule
each clause in Φa-t-elle
φ en FNC, has atunleast one? true literal.
modèle
Certificat. Une valuation (des n variables propositionnelles de φ).
Certifier. Vérifier que chaque clause de φ a au moins un littéral vrai.

instance s Φ = ( x1 ∨ x2 ∨ x 3 ) ∧ ( x1 ∨ x2 ∨ x 3 ) ∧ ( x1 ∨ x2 ∨ x 4 )

certificate t x1 = true, x2 = true, x3 = false, x4 = false

Conclusion. 3-SAT ∈ NP.


8

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 184 / 201
Théorie de la NP-complétude P versus NP

Certifieurs
HAM et Certificats
-PATH. Given : Cycle
an undirected Hamiltonien
graph G = (V, E), does there exist a simple
path P that visits every node?

Ham-Cycle Étant donné un graphe non-dirigé G = (V , E ), existe-t-il un cycle


Certificate.
élémentaire A permutation
dont les sommetsofforment
the n nodes.
V?
Certificat. Une liste des n sommets du graphe.
Certifier. Check that the permutation contains each node in V exactly once,
Certifier. Vérifier que c’est une permutation (sauf pour le dernier qui est égal au premier)
and that there is an edge between each pair of adjacent nodes.
et qu’il existe un arc entre deux sommets consécutifs de cette permutation.

instance s certificate t

Conclusion. HAM-PATH ∈ NP.


9

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 185 / 201
Théorie de la NP-complétude P versus NP

Définition de la classe de complexité NP

Intuition des algorithmes de certification. On considère un problème de décision X .


Un certifieur pour X est un algorithme C (I , c) où I est une instance de X et qui
utilise un certificat (ou encore témoin) c pour répondre à la quesiton “I ∈ X ?”.
Un certifieur C (I , c) ne détermine pas si I ∈ X en soi, mais il utilise efficacement
(c-à-d. en temps polynomial) le certificat c pour justifier que I ∈ X .

Définition 63
NP est l’ensemble des problèmes pour lesquels il existe un certifieur C (I , c) qui calcule en
temps polynimial où le certificat c est de taille polynomial : |c| ≤ p(|I |), où p(.) est un
polynôme.
Cela signifie qu’in peut résoudre le problème X par l’algorithme non-déterministe
polynomial suivant :
1 On calcule de façon non-déterministe un certificat c (cela prend un temps
polynomial puisque |c| ≤ p(|I |)) ;
2 On exécute l’algorithme C (I , c) (ce qui prend un temps polynomial) :
Si C (I , c) retourne “oui” alors on accepte l’instance I
sinon on rejette l’instance I .

NP se lit “non-deterministic polynomial time”


S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 186 / 201
Definition of NP Théorie de la NP-complétude P versus NP

Définition de NP
NP. Decision problems for which there is a poly-time certifier.

NP. Les problèmes de décision pour lesquels il existe un certifieur polynomial.

Problem Description Algorithm yes no

Is there a vector x that Gauss-Edmonds # 0 1 1& # 4 & " 1 0 0 % "1%


L-SOLVE elimination
% ( % (
% 2 4 −2 ( , % 2 (
$ ' $ '
$ 1 1 1' , $1'
satisfies Ax = b ? %$ 0 3 15 (' %$36 (' $#0 1 1'& $#1'&

COMPOSITES Is x composite ? AKS (2002) € 51 € 53

Does x have a nontrivial factor


FACTOR ? (56159, 50) (55687, 50)
less than y ?

Is there a truth assignment that ¬ x1 ∨ x2 ¬ x2


SAT
satisfies the formula ?
? x1 ∨ x2
¬ x1 ∨ x2
x1 ∨ x2

Can the nodes of a graph G be


3-COLOR ?
colored with 3 colors?

Is there a simple path between


HAM-PATH
s and t that visits every node?
?

10
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 187 / 201
Théorie de la NP-complétude P versus NP

Les classes de complexité P, NP, et EXPTIME

Définition 64
On définit les classes de complexité suivantes.
P : Les problèmes de décision pour lesquels il existe un algorithme polynomial en temps.
NP : Les problèmes de décision pour lesquels il existe un certifieur polynomial en temps.
EXPTIME : Les problèmes de décision pour lesquels il existe un algorithme exponential
en temps.
NEXPTIME : Les problèmes de décision pour lesquels il existe un certifieur exponential
en temps.
...

Théorème 65
P ⊆ NP

Démonstration.
Soit X ∈ P.
Par définition, il existe une algorithme polynomial-time A(.) qui résout X .
On définit le certifieur C (I , c) = A(I ) qui ignore le certificat.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 188 / 201
Théorie de la NP-complétude P versus NP

NP ⊆ EXPTIME

Théorème 66
NP ⊆ EXPTIME

Démonstration.
Soit un problème X ∈ NP. Par définition, il existe une certifieur polynomial-time C (I , c)
pour X .
L’algorithme A(I ) exponentiel pour résoudre le problème X est le suivant :
1 pour chaque certificat c (où |c| ≤ p(|I |)) // il y en a un nombre exponentiel
Exécuter C (I , c) ;
Retourner I ∈ X si C (I , c) retourne “oui”.
2 Retourner I ∈
/ X.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 189 / 201
Théorie de la NP-complétude P versus NP

Time-hierarchy theorem

P 6⊆ EXPTIME. (Hors cours.)

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 190 / 201
Exhaustive search: try all 2n truth assignments.
Théorie de la NP-complétude P versus NP

La grande question : P = NP ?

Can we do résout-on
Q. Comment anything unesubstantially more
instance de 3-SAT avec nclever?
variables ?
onjecture. No poly-time
A. Par une recherche algorithm
exhaustive for 3-S
: on essaie tous n .
les 2ATvaluations.
Q. Ne peut-on pas faire"intractable"
quelque chose de plus astucieux ?
Conjecture. Il n0 existe pas d 0 algorithme polynomial pour 3-SAT.
| {z }
“intractable”

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 191 / 201
Théorie de la NP-complétude P versus NP

The
Lamain question:
grande questionPPvs.
= NP
NP ?

Does P = PNP?
A-t-on [Cook
= NP 1971,
? [Cook Edmonds, Levin, Yablonski, Gödel]
1971]
Is the decision problem
Les problèmes assont-il
de décision easy aussi
as the certification
faciles problem?
que les problèmes de certification ?

EXP NP EXP

P P = NP

If P ≠ NP If P = NP

Si oui.Efficient
If yes. Alors nous avons des for
algorithms algorithmes efficaces
3-SAT, TSP pour, F3-SAT,
, 3-COLOR TSP, 3-Color, etc.
ACTOR, …
Si non. Il n’existe pas d’algorithmes efficaces pour 3-SAT, TSP, 3-Color, etc.
If no. No efficient algorithms possible for 3-SAT, TSP, 3-COLOR, …
Un consensus. Sans doute que la réponse est “non”, c’est à dire P 6= NP.
Consensus opinion. Probably no.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 192 / 201
Théorie de la NP-complétude NP-complétude

NP-complétude

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 193 / 201
Théorie de la NP-complétude NP-complétude

Polynomial transformation

Définition 67 (Réduction “à la Karp”, rappel)


Le problème X se réduit au problème Y , noté X ≤P Y , si il existe un polynôme p(.) tel
que pour toute instance arbitraire I du problème X , on peut construire une instance r (I )
du problème Y avec |r (I )| ≤ p(|I |) telle que

I ∈ X ssi r (I ) ∈ Y

Définition 68 (NP-complétude)
Un problème Y est NP-complet si
(1) Y ∈ NP, et
(2) pour tout problème X ∈ NP, on a X ≤P Y .

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 194 / 201
Théorie de la NP-complétude NP-complétude

Polynomial transformation

Définition 67 (NP-complétude)
Un problème Y est NP-complet si
(1) Y ∈ NP, et
(2) pour tout problème X ∈ NP, on a X ≤P Y .

Théorème 68
Soit Y un problème NP-complet. Alors, Y ∈ P iff P = NP.

Démonstration.
⇐ Si P = NP, comme Y ∈ NP alors Y ∈ P.
⇒ Supposons Y ∈ P.
Soit X ∈ NP. Puisque X ≤P Y , on a X ∈ P
Donc NP ⊆ P.
Or on sait déjà que P ⊆ NP.

Question fondamentale. Existe-t-il des problèmes naturels NP-complets ?


S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 194 / 201
Circuit satisfiability
Théorie de la NP-complétude NP-complétude

Satisfaisabilité d’un circuit


CIRCUIT-SAT. Given a combinational circuit built from AND, OR, and NOT gates,
is there a way Étant
Circuit-Sat to set the circuit
donné un inputs
circuitsocombinatoire
that the output is 1?
construit à partir de portes and, or et
not, existe-t-il une valeur pour les entrées du circuit de sorte qu’il en resorte la valeur 1 ?

output

¬ ∧

yes: 1 0 1
∧ ∨ ∨

1 0 ? ? ?

hard-coded inputs variable inputs

26
Théorème 69 (Cook 1971, Levin 1973)
Circuit-Sat ∈ NP-complet.

Admis.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 195 / 201
Théorie de la NP-complétude NP-complétude

Établir la NP-complétude d’un problème

Une fois qu’on a établi qu’un problème est NP-complet, on peut en récupérer plein
d’autres.
Pour montrer que Y ∈ NP-complet.
1 On établit que Y ∈ NP.
2 On choisit un problème NP-complet X .
3 On établit que X ≤P Y .

Théorème 70
Si X ∈ NP-complet, Y ∈ NP, et X ≤P Y , alors Y ∈ NP-complet.

Démonstration.
Soit un problème Z ∈ NP. Alors on a Z ≤P X , et aussi X ≤P Y .
Par transitivité Z ≤P Y
Donc Y ∈ NP-complet.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 196 / 201
Théorie de la NP-complétude NP-complétude

3-satisfaisabilité est NP-complet

Théorème 71
∈ NP-complet.
Circuit satisfiability
3-Sat

CIRCUIT-SAT. Given a combinational circuit built from AND, OR, and NOT gates,
Démonstration.
is there a way to set the circuit inputs so that the output is 1?
Elle repose sur Circuit-Sat ≤P 3-Sat.
output

¬ ∧

yes: 1 0 1
∧ ∨ ∨

1 0 ? ? ?

hard-coded inputs variable inputs


que l’on réduit à la satisfaisabilité de
(¬(true ∧ false)) ∧ ((false ∨ p1 ) ∧ (p2 ∨ p3 )). 26

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 197 / 201
Théorie de la NP-complétude NP-complétude

Implications de Karp et Cook-Levin


Implications of Karp + Cook-Levin

CIRCUIT-SAT

s 3-SAT
uce
red
- t ime T-SET
y
pol
N
DE
AT PEN
3-S o INDE
t

INDEPENDENT-SET DIR-HAM-CYCLE GRAPH-3-COLOR SUBSET-SUM

VERTEX-COVER HAM-CYCLE PLANAR-3-COLOR SCHEDULING

All of these problems are NP-complete; they are


SET-COVER TSP manifestations of the same really hard problem.

37
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 198 / 201
Théorie de la NP-complétude NP-complétude

Quelques problèmes NP-complets

Some NP-complete problems

Basic genres of NP-complete problems and paradigmatic examples.


・Packing + covering problems: SET-COVER, VERTEX-COVER,INDEPENDENT-SET.
・Constraint satisfaction problems: CIRCUIT-SAT, SAT, 3-SAT.
・Sequencing problems: HAM-CYCLE, TSP.
・Partitioning problems: 3D-MATCHING, 3-COLOR.
・Numerical problems: SUBSET-SUM, PARTITION.
En pratique.
Practice. Most NP problems are known to be either in P or NP-complete.
La plupart des problèmes NP sont connus pour être soit dans P, soit NP-complets.
Exceptions notables. Factor, Graph-Isomorphism, Nash Equilibrium.
Notable exceptions. FACTOR, GRAPH-ISOMORPHISM, NASH-EQUILIBRIUM.

Theory. [Ladner 1975] Unless P = NP, there exist problems in NP that are
neither in P nor NP-complete.

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 199 / 201
ature. Théorie de la NP-complétude NP-complétude

Plus de problèmes NP-complets

Garey and Johnson


Avec une annexe de plus de 300 problèmes NP-complets.
La référence en Informatique la plus citée.

39

S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 200 / 201
Théorie de la NP-complétude NP-complétude

More
Plus de hard computational
problèmes problems
NP-complets

Aerospace engineering. Optimal mesh partitioning for finite elements.


Biology. Phylogeny reconstruction.
Chemical engineering. Heat exchanger network synthesis.
Chemistry. Protein folding.
Civil engineering. Equilibrium of urban traffic flow.
Economics. Computation of arbitrage in financial markets with friction.
Electrical engineering. VLSI layout.
Environmental engineering. Optimal placement of contaminant sensors.
Financial engineering. Minimum risk portfolio of given return.
Game theory. Nash equilibrium that maximizes social welfare.
Mathematics. Given integer a1, …, an, compute
Mechanical engineering. Structure of turbulence in sheared flows.
Medicine. Reconstructing 3d shape from biplane angiocardiogram.
Operations research. Traveling salesperson problem.
Physics. Partition function of 3d Ising model.
Politics. Shapley-Shubik voting power.
Recreation. Versions of Sudoko, Checkers, Minesweeper, Tetris.
S. Pinchinat (IRISA, Université de Rennes 1) Méthodes algorithmiques UE ALG – année 2019-2020 201 / 201