• Aucun résultat trouvé

Un algorithme plus rapide pour le probl`eme LCS

Dans le document Semestre d’Automne 2010-2011 (Page 124-132)

Soient X et Y deux suites de longueur n et m respectivement, avec n ≤ m. Nous constru-irons dans cette section un algorithme qui trouve un ´el´ement deLCS(X, Y)en temps et espace O(mp), o`u m est la longueur de Y et p = lcs(X, Y). Rappelons que l’algorithme pour le probl`eme LCS vu dans la section 4.4.2 avait un temps de parcoursO(mn).

Nous commenc¸ons par ´etudier l’ensemble M = {(i, j)| Xi = Yj}de tous les ´el´ements qui se correspondent dansXetY.

Exemple: Si X = hB, D, C, A, B, Aiet Y = hA, B, C, B, D, A, Bi(Comme pour l’exemple de dans la section 4.4.2), l’ensembleM peut ˆetre repr´esent´e par les points dans le diagramme suivant:

Consid´erons la relation≪sur(N×N)d´efinie comme suit:

(k, l)≪(k, l) ⇐⇒ k < k∧l < l.

Cette relation d´efinit un ordre partiel sur l’ensembleM. (Rappelons qu’un ordre partiel est une relation transitive et asym´etrique.)

Remarque: Comme≪n’est pas un ordre total, il se peut queM ait des ´el´ements non-comparables.

Par exemple, pour(4,1),(3,3)∈M nous n’avons ni(4,1)≪(3,3), ni(3,3)≪(4,1).

Un sous-ensembleC ⊆M ne contenant que des ´el´ements comparables s’appelle une chaˆıne.

Une antichaˆıne A ⊆ M est un sous-ensemble dans lequel il n’y a pas deux ´el´ements qui sont comparables.

Exemple. Quelques chaˆınes:

Algorithmique - Semestre d’Automne 2011/2012

Il est clair qu’une chaˆıne correspond `a un ´el´ement dansCS(X, Y). Ici nous avons 1 =b hB, Di

Notre but est donc de trouver une chaˆıne de longueur maximale. Nous regardons d’abord un lien int´eressant entre chaˆınes et antichaˆınes. Pour expliquer ce lien, nous avons besoin de la notion de d´ecomposition d’un ensemble fini et partiellement ordonn´e. C’est un ensemble d’antichaˆınes{A1, A2, . . . , Ak}tel que chaque ´el´ement deM est contenu dans au moins une des Ai:

M =A1∪ · · · ∪Ak.

Une d´ecomposition minimale est une d´ecomposition contenant aussi peu d’antichaˆınes que pos-sible.

Th´eor`eme 4.3 Dans un ensemble fini et partiellement ordonn´eM, la longueurpd’une chaˆıne maximale est ´egale `a la taille d’une d´ecomposition minimale deM.

Preuve. Soit{A1, . . . , Ak}une d´ecomposition minimale de M, et soitC une chaˆıne maximale avec p ´el´ements. Sik < p, alors il existec, c ∈ C, c 6= c, tels quecetc sont dans la mˆeme antichaˆıne (par le principe des tiroirs). C’est impossible, et donck ≥p.

Pour montrer que k ≤ p, nous construisons une d´ecomposition enpantichaˆınes. Ainsi s’il existe une d´ecomposition enpantichaˆınes, alors une d´ecomposition minimale aura certainement au pluspantichaˆınes. Pourc∈M, soitℓ(c)la longueur d’une chaˆıne maximale avec plus grand

´el´ementc. Siℓ(c) =ℓ(c), alorscetcsont incomparables (Pourquoi?). Donc Ai :={c|ℓ(c) =i}, 1≤i≤p

formentpantichaˆınes qui couvrentM.

La construction de la preuve dans notre cas est comme suit:

A

Le lemme suivant sugg`ere qu’il est facile de calculer une chaˆıne maximale `a partir de cette d´ecomposition.

Lemme 1 Soit{A1, . . . , Ap}la d´ecomposition minimale deM telle que Ai :={c|ℓ(c) = i}, 1≤i≤p,

comme d´ecrite ci-dessus. Soit2≤i≤p. Alors nous avons

∀ci ∈Ai ∃ci1 ∈Ai1 tel queci1 ≪ci.

Algorithmique - Semestre d’Automne 2011/2012

Pour obtenir une chaˆıne de longueur maximale, nous commenc¸ons avec un ´el´ementcp ∈Ap

quelconque, puis nous choisissonscp1 ∈Ap1aveccp1 ≪cp; ensuite nous choisissonscp2 ∈ Ap2 aveccp2 ≪cp1, etc. Ceci nous fournit une chaˆıne compl`ete de longueurp:

c1 ≪c2 ≪ · · · ≪cp1 ≪cp, et par cons´equent un ´el´ement deLCS(X, Y).

Il ne reste donc plus qu’`a trouver une d´ecomposition minimale{A1, . . . , Ap}de notre ensem-bleM. Nous Pour ce, Nous construisons nos antichaˆınes de haut en bas. Nous parcourons M ligne par ligne, en ajoutant le point(i, j) `a l’antichaˆıneAk si et seulement s’il ne se trouve pas `a droite du point le plus `a gauche deAk. Nous appelonsskla colonne du point le plus `a gauche de Ak.

Pour l’exemple ci-dessus nous obtenons:

• Ligne 1: Nous ajoutons (1,4)et(1,6) `aA1, et nous avons doncs1 = 4. Pour l’instant nous n’avons qu’une seule antichaˆıne non vide:

3 l’ajoutons donc `aA1. Le prochain point est (2,5), cette fois comme5 > s1 nous ne l’ajoutons pas `aA1. Par contre l’antichaˆıneA2 est vide nous ajoutons donc(2,5) `aA2. Ainsi maintenant s1 = 1ets2 = 5. Nous avons donc deux antichaˆınes non vides:

•Ligne 3: Le seul point sur la ligne3est(3,3). Comme3> s1nous ne l’ajoutons pas `aA1. Par contre3≤ s2, nous ajoutons donc(3,3) `aA3. Ainsi maintenants1 = 1 ets2 = 3. Nous avons toujours deux antichaˆınes non vides:

3

Cette proc´edure est r´ealis´ee par l’algorithme suivant:

Dans cet algorithme nous avons

• irepr´esente la ligne actuelle deM ´etudi´ee.

• A[k]repr´esente l’antichaˆıneAk.

• s[k]repr´esente la colonne actuelle la plus `a gauche de l’antichaˆıneAk.

On rappelle ´egalement que le minimum d’un ensemble vide est∞. On utilise ce fait `a la ligne14 pour garantir que l’algorithme termine.

Algorithmique - Semestre d’Automne 2011/2012

Algorithme 31 FASTLCS(X, Y)

Input: SuitesX etY, de longueursnetm.

Output: La d´ecomposition minimale(A1, . . . , Ap)deM, telle queAi ={c|ℓ(c) = i}, o`uℓ(c) est la longueur d’une chaˆıne maximale avec plus grand ´el´ementc.

1: Construire l’ensembleM ={(i, j)|Xi =Yj}

2: fork = 1. . . ndo

3: s[k]←n+ 1

4: A[k]← ∅

5: end for

6: fori= 1. . . mdo

7: l ←min{k |(i, k)∈M}

8: k ←1

9: whilel ≤ndo

10: ifl ≤s[k]then

11: A[k]←A[k]∪ {(i, j)∈M |l≤j ≤s[k]}

12: temp←s[k]

13: s[k]←l

14: l ←min{j |(i, j)∈M ∧j >temp}

15: end if

16: k←k+ 1

17: end while

18: end for

19: p←max{k |s[k]≤n}.

20: return (A[1], . . . , A[p]).

Remarquons que s[j] = n + 1 si et seulement siAj est vide. A la fin de l’algorithme, le nombre d’antichaines non vides est ´egal `a

p= max{k |s[k]≤n}, et les antichaˆınes construites sont stock´ees dansA[k],1≤k ≤p.

Th´eor`eme 4.4 L’algorithme ci-dessus a un temps de parcours deO(mp), o`up=lcs(X, Y).

Preuve. Exercice.

Remarque: Une fois que nous avons trouv´e cette d´ecomposition minimale(A1, . . . , Ap)deM nous utilisons le Lemme 1 pour en d´eduire une chaˆıne de longueur maximale. Nous la constru-isons de la droite vers la gauche.

Dans l’exemple ci-dessus nous commenc¸ons par prendre un ´el´ement deAp = A4, disons(6,6).

Puis le Lemme nous dit qu’il existe un ´el´ement (i, j) ∈ A3 avec (i, j) ≪ (6,6), prenons par exemple(4,5). Ensuite il nous faut un ´el´ement deA2, (prenons(3,3)) et finalement un ´el´ement deA2(prenons(2,1)).

Puisque nous l’avons construite en commenc¸ant `a droite, notre chaine est

(2,1),(3,3),(4,5),(6,6)

, et donc la sous-suite commune correspondante est

hB, C, B, Ai.

5

Algorithmes gloutons

Pour r´esoudre certains probl`emes d’optimisation, il suffit de faire un choix localement optimal `a chaque pas de l’algorithme. En effet, dans certain cas, une famille de choix localement optimaux m`ene `a une solution globalement optimale. Ce fait est au cœur des algorithmes gloutons: un algorithme glouton fait toujours le choix qui lui semble le meilleur sur le moment. Apr`es l’´etude d’un exemple typique, nous ´etudierons les aspects principaux de strat´egies glouton. Ces strat´e-gies seront illustr´ees `a l’aide des exemples du probl`eme de sac `a dos et du code de Huffman, utilis´e dans la compression des donn´ees.

5.1 EXEMPLE: HORAIRES DE SALLES DE COURS

Cet exemple concerne le probl`eme de l’ordonnancement de plusieurs activit´es qui rivalisent pour l’utilisation exclusive d’une ressource commune, l’objectif ´etant de s´electionner un ensemble de taille maximale d’activit´es mutuellement compatibles.

Probl`eme: n professeurs veulent utiliser la mˆeme salle de cours. Chaque professeur a une pr´ef´erence pour un intervalle de temps: Le professeur i veut utiliser la salle dans l’intervalle [si, fi).

La tˆache de l’organisateur est de trouver un plus grand sous-ensemble (c.`a.d. un ensemble de taille maximale)AdeS={1, . . . , n}tel que pouri, j ∈A,i6=j, on a

[si, fi)∩[sj, fj) =∅. (5.1) La strat´egie gloutonne est la suivante:

Nous trions d’abord les intervalles selon leur temps d’arrˆetfi, afin d’avoir f1 ≤f2 ≤ · · · ≤fn.

On peut faire ce tri en tempsO(nlog(n)). Puis l’algorithme op`ere de la mani`ere suivante:

Th´eor`eme 5.1 L’algorithme GREEDYSELECTORsatisfait le nombre maximal de pr´ef´erences.

Algorithme 32 GREEDYSELECTOR(s, f) Call: GREEDYSELECTOR(s, f)

Input: setf sont des tableaux de longueurn,f1 ≤ · · · ≤fn. Output: Sous-ensembleAde{1, . . . , n}v´erifiant (5.1).

1: n ←length[s]

2: A ← {1}

3: j ←1

4: fori= 2, . . . , ndo

5: ifsi ≥fj then

6: A←A∪ {i}

7: j ←i

8: end if

9: end for

10: return A

Nous donnons maintenant une preuve de ce th´eor`eme.

Preuve. SoitS ={1,2, . . . , n}l’ensemble des indices des pr´ef´erences. La pr´ef´erence 1, r´ealis´ee par l’algorithme, a le temps d’arrˆet le plus tˆotf1. Nous montrons qu’il y a une solution optimale avec le premier choix fait par l’algorithme, que nous appelons “choix glouton 1”.

Soit A ⊆ S une solution optimale. Supposons quek ∈ Aa le temps d’arret minimal dans cette solution, i.e.,kv´erifiefk ≤fj ∀j ∈ A. Sik = 1, nous avons fini. Sik >1, nous pouvons remplacerAparA = (A\ {k})∪ {1}, commef1 ≤fkpar hypoth`ese. Ainsi, il y a une solution optimale avec le choix glouton1que nous noterons de nouveau avecA.

Apr`es ce choix, nous appliquons la mˆeme strat´egie aux pr´ef´erences restantes.

S :={i∈S |si ≥f1}.

Alors, A\ {1} est une solution optimale pour S: si la solution optimale B pour S est plus grande queA\ {1}, alorsB∪ {1}serait une solution pourSavec plus d’´el´ements queA, ce qui contredit l’hypoth`ese queAest de taille maximale.

En appliquant une induction, on prouve le th´eor`eme.

Dans le document Semestre d’Automne 2010-2011 (Page 124-132)