• Aucun résultat trouvé

o`u T est une matrice k × k de similarit´e d´efinie par :

Tij = |P1i∩ P j

2| (6.3)

Le maximum de cette somme est d´etermin´e en r´esolvant un probl`eme d’affectation classique. En effet, la plupart des articles [Day, 1981; Gusfield, 2002; Charon et al., 2006; Konovalov et al., 2005] sugg`erent juste de d´eterminer l’affectation maximale ¯σ en appli- quant directement l’algorithme hongrois [K¨uhn, 1955] sur la matrice de similarit´e T (qui doit ˆetre aussi convertie dans une matrice qui permet de r´esoudre un probl`eme dual de minimisation).

Similarit´e et distance normalis´ees Tr`es souvent, il est utile d’employer les valeurs normalis´ees de la similarit´e et de la distance : sP1,P2 = s(P1,P2|S| ) et dP1,P2 = d(P1,P2)|S| . Ces valeurs indiquent la proportion d’´el´ements partag´es par deux partitions, sP1,P2, ou la proportion d’´el´ements qui doivent ˆetre transf´er´es, dP1,P2. Il est ´evident – voir (6.1) – , que la formule suivante est toujours satisfaite :

dP1,P2 + sP1,P2 = 1.

Notons que la distance est toujours strictement inf´erieure `a |S|, et ainsi, on aurait pu ´

egalement la normaliser par rapport `a d’autres valeurs, par exemple la distance maximum [Charon et al., 2006]. Cependant, la normalisation simple ci-dessus suffit dans cette th`ese.

P1: |1 2 3 4 | 5 6 7 | 8 9| P2: |1 2 3 4 8 | 5 9 | 6 7| => T(Mat. de Similarité) 4 0 0 0 1 2 1 1 0 => Similarité = 7 Distance = |S| - 7 = 2

Figure 6.1 – Un exemple de calcul de distance. Il faut transf´erer au moins deux ´el´ements (car d(P1, P2) = 2) entre les classes d’une partition pour la transformer en l’autre.

La Figure 6.1 illustre le processus de calcul de la distance. Il y a deux 3−partitions P1 et P2 de l’ensemble S = {1, 2, . . . , 9} telles que : P11 = {1, 2, 3, 4}, P12 = {5, 6, 7}, et P13 = {8, 9} d´efinissent la premi`ere partition, et P21 = {1, 2, 3, 4, 8}, P22 = {5, 9} et P23 = {6, 7} d´efinissent la deuxi`eme. La matrice de similarit´e T est calcul´ee avec la formule (6.3) ; la meilleure affectation ¯σ, maximisant la somme dans (6.2), est d´efinie par ¯σ(1) = 1, ¯σ(2) = 3 et ¯σ(3) = 2. Nous obtenons s(P1, P2) = T11+ T23+ T32= 4 + 2 + 1 = 7, et ainsi, la distance est d(P1, P2) = |S| − s(P1, P2) = 2 (la distance normalis´ee est dP1,P2 = 29 = 22%|S|). En effet, si on change la classe de 2 ´el´ements (e.g. 8 et 5 en P2, cf. Figure 6.1), on transforme une partition en l’autre. .

6.3

Calcul de la distance

Dans cette section, nous d´ecrivons la nouvelle approche pour calculer la similarit´e – et implicitement la distance via (6.1). Nous pr´esentons plusieurs conditions qui pourraient

nous permettre de calculer la similarit´e entre P1 et P2 en complexit´e temporelle O(|S|). Notons que si aucune de ces conditions n’est satisfaite, notre algorithme ne perd que O(|S|) pour v´erifier cela. L’algorithme comporte deux ´etapes importantes : (i) la construction de la matrice de similarit´e T (P1, P2), et (ii) la construction du meilleur ¯σ, qui maximise la somme (6.2). Ces deux ´etapes sont d´etaill´ees dans les Sections 6.3.1 et 6.3.2, ci-dessous.

6.3.1 Matrice de similarit´e T en O(|S|)

Bien que la matrice T ait k × k ´el´ements, notre algorithme n’utilise effectivement que |S| valeurs au maximum : les valeurs Tij = |P1i∩P

j

2| avec i = P1(x) et j = P2(x), pour tous les x ∈ S. Pour les autres i et j (s’il n’y a pas de x ∈ S tel que i = P1(x) et j = P2(x)), la valeur |P1i∩ P2j| est forcement nulle. La construction de T se fait en trois ´etapes :

1. L’allocation de m´emoire pour T. Bien qu’il s’agisse de k2 ´el´ements, cette op´eration peut se faire au niveau du bloc de m´emoire, car il n’y a pas besoin de faire une ini- tialisation – plusieurs instructions en plusieurs syst`emes d’exploitations permettent de faire cela en O(1).

2. Parcourir tous les ´el´ements x ∈ S pour initialiser TP1(x),P2(x)= 0 en O(|S|) ;

3. Pour chaque ´el´ement x ∈ S, incr´ementer TP1(x),P2(x) := TP1(x),P2(x)+ 1 ; cette op´era- tion n´ecessite O(|S|) op´erations.

Dor´enavant, les valeurs aux positions TP1(x),P2(x) (pour tout x ∈ S) s’appelleront des ´

el´ements actifs. En fait, la structure matricielle est employ´ee uniquement pour pouvoir indexer ces ´el´ements actifs, pour adresser rapidement les positions TP1(x),P2(x) avec x ∈ S. Les autres ´el´ements du T ne sont jamais utilis´es, ni pour lire, ni pour ´ecrire. On a tout de mˆeme besoin d’une structure de matrice, parce que on ne connaˆıt pas pr´ealablement les positions des ´el´ements actifs.

Concernant l’allocation de la matrice T , cela n´ecessite de trouver un bloc de m´emoire qui contient k2 entiers, mais sans initialisation de valeur. La plupart des syst`emes d’ex- ploitations peuvent faire cela en temps constant – il n’y a aucune contrainte th´eorique qui impose de parcourir chaque octet du bloc. Nous avons utilis´e l’instruction malloc(k2· sizeof(int)), qui recherche un bloc plus grand que la taille demand´ee (i.e. au moins k2· sizeof(int) octets) dans la liste des blocs RAM libre3. La complexit´e de cette op´eration d´epend de la fragmentation de la m´emoire RAM, et non pas du nombre d’octets demand´es. Le lecteur int´eress´e peut v´erifier une impl´ementation demalloc – une des plus populaires est celle de Doug Lea, voir “A memory allocator by Doug Lea”. En Windows, la mˆeme op´eration peut se faire via la routine HeapAlloc(), avec le drapeau HEAP_ZERO_MEMORY d´esactiv´e.4

3. Il ne faut surtout pas utiliser calloc, car cette fonction fait aussi l’initialisation.

4. Nos heuristiques calculent des millions de distances. Mˆeme si on fait une allocation-avec-initialisation de complexit´e O(k2), cette op´eration est n´ecessaire une seule fois, parce que la mˆeme matrice peut ˆetre (re-)utilis´ee pour tous les calculs de distance (apr`es chaque calcul, on remet `a 0 les ´el´ements actifs).

6.3 Calcul de la distance

6.3.2 Affectation maximale en O(|S|)

Cette section pr´esente plusieurs conditions qui nous permettent de calculer la distance de transfert en O(|S|). Nous consid´erons que l’entr´ee consiste en un entier |S| (l’ensemble S est toujours {1, 2, . . . |S|}) et deux vecteurs de taille |S| qui indiquent P1(x) et P2(x) pour tous les x ∈ S. Ces deux vecteurs peuvent prendre des valeurs entre 1 et k. Nous utilisons la matrice de similarit´e T construite dans la section pr´ec´edente et l’objectif est de trouver une affectation maximale ¯σ, i.e. une fonction bijective ¯σ qui maximise la somme P

1≤i≤kTi,σ(i) dans la formule (6.2).

Pour chaque condition (voir ci-dessous), nous proposons un algorithme Las Vegas – soit il calcule la distance, soit il conclut que la condition n’est pas satisfaite. Autrement dit, le temps “perdu” pour v´erifier les conditions est toujours O(|S|) ; il n’accroˆıt pas la complexit´e totale d’un algorithme plus g´en´eral si cela s’av`ere n´ecessaire.

Th´eor`eme 6.1. Si ∀i ∈ {1, 2, . . . , k},∃j ∈ {1, 2, . . . , k} tel que Tij > Tij1 et Tij > Ti1j, ∀j1 6= j, i16= i, alors la distance de transfert peut ˆetre d´etermin´ee en O(|S|).

D´emonstration. Dans une premi`ere ´etape, il est possible de calculer en O(|S|) temps tous les ´el´ements actifs de T (voir la Section 6.3.1), ainsi que Ti¯σ(i), l’´el´ement maximum unique de chaque ligne i. Pour d´eterminer ces maximums de ligne, il suffit de parcourir les O(|S|) ´

el´ements actifs. Pour chaque ´el´ement actif Tij, l’algorithme effectue l’instruction suivante : si Tij est plus grand que le maximum courant de la ligne i (au d´ebut, ce maximum est z´ero pour chaque ligne), le maximum courant est mis `a jour, il devient Tij.

Comme Tσ(i) est un maximum strict de la ligne i, toute autre fonction σ : S → S conduirait `a une plus petite sommeP

1≤i≤kTi,σ(i). La v´erification du fait que ¯σ est bijective vient du fait que si ¯σ(i) = ¯σ(i0) = j, alors Tij et Ti0j repr´esentent le maximum unique de la colonne j (car chaque maximum strict de ligne doit ˆetre aussi un maximum de colonne). Ainsi, i doit ˆetre ´egal `a i0.

Les in´egalit´es de ce th´eor`eme doivent ˆetre strictes, car sinon, il n’est pas toujours

possible de d´eterminer une fonction bijective ¯σ, e.g. si T = "

2 1 2 1

#

. Le cas r´esolu par

ce th´eor`eme peut ˆetre vu comme le dual d’un cas particulier d’algorithme hongrois o`u le premier pas d´ecouvre k z´eros mutuellement ind´ependants (i.e. ne se situant pas sur la mˆeme ligne ou colonne). Cependant, nous calculons la distance de transfert sans convertir le probl`eme en un probl`eme de minimisation (l’algorithme hongrois ne r´esout que des probl`emes de minimisation) et sans ex´ecuter les r´eductions de complexit´e O(k ×k) requises par l’algorithme hongrois.

Une condition similaire pourrait ˆetre exprim´ee d’une fa¸con plus g´en´erique, sans men- tionner la matrice T .

Corollaire 6.2. Si ∀i ∈ {1, 2, . . . , k},∃j ∈ {1, 2, . . . , k} tel que |P1i∩ P2j| > |P1i| 2 et |P i 1∩ P2j| > |P j 2|

2 , alors la distance de transfert peut ˆetre d´etermin´ee en O(|S|).

D´emonstration. Les conditions de cette hypoth`ese repr´esentent un cas particulier des conditions du Th´eor`eme 6.1. En utilisant (6.3), nous obtenonsP

P2`|. Comme tous les classes P`

2 sont disjointes et ont comme union S, P

1≤`≤k|P1i∩ P2`| = |Pi

1∩ S| = |P1i|. Par cons´equent, pour chaque ligne i ∈ {1, 2, . . . k}, les ´equations suivantes sont valides :

X 1≤`≤k

Ti`= |P1i|. (6.4)

Par un raisonnement similaire, nous pouvons conclure que :

X 1≤`≤k

T`j = |P2j|. (6.5)

En utilisant les conditions de l’hypoth`ese, il s’en suit que Tij > Tij1 et Tij > Ti1j, ∀j1 6= j, i1 6= i et l’algorithme peut ˆetre construit avec le Th´eor`eme 6.1.

L’inconv´enient principal des conditions de ce corollaire et du Th´eor`eme 6.1 est que, s’il y a une seule ligne i sur laquelle les conditions ne sont pas satisfaites, le reste de la construction ne sert plus `a notre objectif. Le prochain th´eor`eme essaye de contourner ce probl`eme et, par ailleurs, il a l’avantage de ne pas pouvoir ˆetre assimil´e `a une ´etape duale de l’algorithme hongrois. Nous montrons qu’il est possible de d´eterminer la meilleure affectation i→ j sur une ligne particuli`¯σ ere i mˆeme sans lire toute la matrice. Rappelons que l’algorithme hongrois renvoie uniquement des solutions compl`etes, il ne peut pas prendre des d´ecisions interm´ediaires sur des lignes ou colonnes particuli`eres.

Th´eor`eme 6.3. Si pour une ligne i ∈ {1, 2, . . . , k}, il y a une colonne j ∈ {1, 2, . . . , k} telle que Tij ≥ Tij1 + Ti1j∀j1 6= j, i1 6= i, il existe une affectation maximale ¯σ telle que ¯

σ(i) = j. Si le nombre de lignes i qui ne satisfont pas cette condition est major´e par p|S|,3 alors la distance de transfert peut ˆetre d´etermin´ee en O(|S|).

D´emonstration. En utilisant un algorithme tr`es similaire `a celui du Th´eor`eme 6.1, il est possible de construire la matrice T , et de d´eterminer la valeur maximum de chaque ligne et de chaque colonne. En parcourant les O(|S|) ´el´ements actifs, il est possible de marquer les positions de tous les maximums d’une ligne. Ainsi, seulement un ´el´ement marqu´e Tij peut satisfaire Tij ≥ Tij1 + Ti1j∀j1 6= j, i1 6= i ; pour v´erifier cette condition pour tout maximum Tij d’une ligne, il suffit juste de v´erifier que Tij ≥ Ti,−+ T−,j, o`u Ti,− et T−,j sont les deuxi`emes valeurs maximums de la ligne i et de la colonne j, respectivement. Nous consid´erons que Ti,− = Tij si et seulement si la ligne i contient deux (ou plus) ´el´ements de valeur maximum. De plus, la d´etermination de la deuxi`eme valeur maximum d’une ligne (ou d’une colonne, respectivement) est tr`es similaire `a la d´etermination du premier maximum. Ainsi, la condition de l’hypoth`ese peut ˆetre v´erifi´ee pour toutes les lignes en O(|S|).

Notons Tij un ´el´ement marqu´e par la proc´edure ci-dessus, tel que Tij ≥ Tij1+Ti1j∀j16= j, i1 6= i. Nous devons montrer qu’il est possible de construire une affectation maximale qui associe i `a j. Soit σ une affectation maximale. Si σ(i) = j, alors σ est effectivement l’affectation recherch´ee. Sinon, soit j1 = σ(i) et i1 = σ−1(j) et on obtient :

6.3 Calcul de la distance

Tij+ Ti1j1 ≥ Ti1j+ Tij1 = Ti1σ(i1)+ Tiσ(i) (6.6) En composant la transposition (i, i1) avec σ, on obtient une nouvelle fonction bijective ¯

σ qui diff`ere de σ uniquement sur les positions i et i1 – les valeurs sur ces deux positions sont invers´ees, i.e. ¯σ(i) = j et ¯σ(i1) = j1. La diff´erence de valeur entre les affectations ¯σ et σ (voir (6.2)) est Tij+ Ti1j1− (Ti1j+ Tij1) ≥ 0. En utilisant (6.6), ¯σ doit ´egalement ˆetre une affectation maximale.

Pour r´ecapituler, un algorithme a pu ´etablir une meilleure affectation partielle sur toutes les lignes i qui v´erifient la condition de l’hypoth`ese, ind´ependamment des lignes o`u cette condition n’est pas v´erifi´ee. Cette affectation sur ces lignes est d´etermin´ee en affectant la ligne i `a une ligne j qui satisfait Tij ≥ Tij1+ Ti1j∀j1 6= j, i1 6= i. Si il y a deux lignes i1et i2 affect´ees au mˆeme j, on affecte que i1`a j et i2 peut ˆetre affect´e `a toute autre valeur de la ligne i2 (parce que toutes ces valeurs doivent ˆetre z´ero).

Le reste de l’affectation peut ˆetre construit en appliquant l’algorithme hongrois sur les lignes et les colonnes restantes. Dans les conditions donn´ees en hypoth`ese, le nombre d’´el´ements de {1, 2, . . . , k} non affect´es par ¯σ est k0 =

j 3

p|S|kdans le pire des cas. Pour finir l’affectation, un premier pas marque les k0 lignes non affect´ees et les k0 colonnes non affect´ees. Ensuite, une nouvelle matrice k0 × k0 est allou´ee, et initialis´ee `a z´ero en O(k02) < O(|S|). Finalement, on parcourt les ´el´ements actifs de T pour copier dans la nouvelle matrice k0× k0 tous les ´el´ements situ´es `a l’intersection d’une ligne et d’une co- lonne marqu´ees. L’algorithme hongrois d´etermine la valeur de l’affectation maximale sur cette matrice restreinte en utilisant au maximum O(k03) ≤ O(|S|) op´erations ; ainsi, la complexit´e totale de notre algorithme est toujours O(|S|).

Une condition similaire pourrait ˆetre exprim´ee sans mentionner la matrice T , d’une fa¸con plus simple.

Corollaire 6.4. Si ∀i ∈ {1, 2, . . . , k}, ∃j ∈ {1, 2, . . . , k} tel que |P1i∩ P2j| ≥ |P1i∪P j

2|

2 , alors la distance de transfert peut se calculer en O(|S|).

D´emonstration. Cette proposition suit des ´equations (6.4) et (6.5), parce qu’elle devient un cas particulier de Th´eor`eme 6.3. Cependant, ce corollaire a l’avantage d’ˆetre tr`es facile `

a impl´ementer (voir Algorithme 6.1), car |P1i∪ P2j| = |Pi 1| + |P j 2| − |P1i∩ P j 2| et |P1i| et |P j 2| peuvent ˆetre facilement d´etermin´es.

Concernant les conditions les plus g´en´erales de cette section, notons que les Th´eor`emes

6.1 et 6.3 ne peuvent pas r´esulter l’un de l’autre. Par exemple, si T = "

3 2 2 3

#

, seulement

le Th´eor`eme 6.1 peut ˆetre employ´e ; si T = "

2 2 0 2

#

, on devrait employer le Th´eor`eme

6.3. Dans la prochaine section, nous montrons comment le Th´eor`eme 6.3 et le Corollaire 6.4 peuvent ´egalement ˆetre employ´es dans la pratique pour ne construire qu’une partie de la solution, i.e. une affectation partielle.