• Aucun résultat trouvé

Le cas bidimensionnel

Dans le document Algorithmes géométriques adaptatifs (Page 52-59)

3.2 Le paradigme prétraitement paresseux [KS85]

3.2.1 Le cas bidimensionnel

SoitSetRdeux ensembles d'élements, on noteS L

Rssi8s2S; 8r2 R ; s 

L

r. De même, on dira que x  L

M ssi fxg  L

M. Les algorithmes décrits ci-après reposent sur le lemme suivant:

Lemme 1

Soit T un ensemble de points de R

2 union de deux ensembles disjoints:T =S]R avec S

L

R alors

 y2R est maximal (dominant) dans T ssiy est maximal dans R

 x2S est maximal dans T ssi x est contenu et maximal dans S=R

On peut tout d'abord implanter un algorithme basé sur le paradigme Fusion-Avant-Conquête comme le montre l'encadré 3.8 et la gure 3.6.

8. Ce problème est très utile dans le calcul de l'achage de fenêtres sur un écran. On calcule les zones visibles uniquement (qui ne sont pas recouvertes par d'autres portions de fenêtres) puis on dessine uniquement à l'écran les zones obtenues.

S

R RM

S=R

Vecteur Maximal

Vecteur point supprimé par un point deRM

Ensemble des points deS=R

x=xmavecxmmédiane deP

Fig.3.6  Illustration du paradigme fusion avant conquête pour le calcul des vecteurs maximaux.

Algorithme 3.8: Le calcul des maxima par fusion avant conquête. Fonction Maxima(P =fp1;:::;pn g):maxima; début sin =1alors renvoyer p1; sinon début m=Médiane(P,d n 2 e); S =fp2Pjpx mg R=fp2Pjpx > mg R M=Maxima(R); Calculer Q=S=R M;

(* On ltre les données suivant R M *) renvoyer Maxima(Q)]R

M; n;

On fusionne (ici, on sélectionne en fait) en temps O(F d 1 (jR M j; n 2 ))R

M est l'ensemble des vecteurs maximaux deR. On obtient alors l'équation de récurrence:

Lemme 2

Soit C d

(n;h) la complexité du calcul desh vecteurs maximaux de

n points deE

d alors l'algorithme 3.8 calcule ces vecteurs maximaux en temps

C d (n;h)C d ( n 2 ;jR M j)+F d 1 ( n 2 ;jR M j)+C d ( n 2 ;h jR M j)+O(n)

On remarque que la médiane a permis d'assurer un préordre lexicogra-phique suivant la première coordonnée et on peut ainsi diminuer le problème d'une dimension.

Dans le cas bidimensionnel, en utilisant le fait queF 1

(r;s)=(r+s) on obtient directement un algorithme sensible à la sortie:

Corollaire 1

Le calcul des vecteurs maximaux d'un ensemble den points du plan peut être obtenu en temps optimal:

c 2

(n;h)=(nlogh):

3.2.2 Un algorithme optimal basé sur un prétraitement

paresseux pour le calcul de vecteurs maximaux

dans

E

3

en

(nlogh)

Cet algorithme met en ÷uvre le paradigme de paresse ou prétraitement adapté. Généralement, on traite les données en les ordonnant puis on les balaye (sweep line) en mettant à jour la solution. Comme on doit assurer que le résultat en cours ne doit pas être détruit par les futures données non encore traitées, on choisit une marche (un sens de parcours) qui vérie ce principe. On donne tout d'abord le principe général avec prétraitement complet de l'algorithme (cf. algorithme 3.9) puis on montre les diérentes étapes qui ont permis de le rendre sensible à la sortie.

On remarque tout d'abord que le résultat du test x  M M est celui de x 0  M M 0x 0 = (x 2 ;:::;x d ) et A 0 = fa 0

ja 2 Ag puisque les données ont été triées par ordre lexicographique (suivant la première coordonnée puis en cas d'égalité suivant la deuxième, etc.). Analysons la complexité de l'algo-rithme 3.9: c(n;h)= O(nlogn) | {z } tri lexicographique +O((n+h)logh) | {z } marche

Algorithme 3.9: Le calcul des maxima par une marche sur les données pré-traitées. Fonction Maxima(P =fp 1 ;:::;p n g): maxima; début P 0=TriLexicographiqueDécroissant(P); M ;; Tant queP 0 6=; faire x Premier(P 0 ); P 0 P 0 nfxg; si x6 M M alors M M [fxg; n; n.

En eet, on peut répondre au test x 0

 M

M

0 en O(logh) avec une structure de données adéquate [KLP75] et on insère un vecteur maximal en O(logh) dans cette structure. Le coût de cet algorithme est O(nlogn). On voit que le tri des données enO(nlogn)a un coût dominant dans la com-plexité de l'algorithme (pénalise le coût de la marche en O((n+h)logh) = O(nlogh)). De plus, on remarque que les données de Sn(S=R )(les vecteurs de S éliminés par les vecteurs maximaux de R) ont été triées inutilement. Pour améliorer cet algorithme et le rendre sensible à la sortie, on prétraite en triant lexicographiquement les données en k paquets (P

i ; 1  i  k) de tailles au plus d n k e vériant: P =] k i=1 P i ; et P i <P i+1 ; pour 1i<k.

On réalise cette étape par l'algorithme de la médiane en itérant sur des paquets de taille de plus en plus petite en (nlogk). On retrouve ainsi le tri qui considère n paquets de taille d

n n

e = 1 en temps (nlogn). L'algo-rithme 3.9 se transforme aisément pour tenir compte du partitionnement (cf. algorithme 3.10).

Analysons la complexité de cet algorithme: on trie tout d'abord les don-nées en k paquets de taille au plus d

n k

Algorithme 3.10: Le calcul des maxima par une marche sur les données pré-traitées en k paquets. Fonction Maxima(P =fp 1 ;:::;p n g):maxima; début P 0=PaquetLexicographiqueDécroissant(P,k); (* on a P 0 =] k i=1 P i *) M ;;

(* on initialise les vecteurs maximaux à ; *) Pour i=k en descendant jusqu'à 1faire

P i

P i

=M;

(* on élimine les vecteurs dominés de P i *) Tant que P i 6=; faire x LexicographiqueMax(P i); M M [fxg; P i P i =fxg; n; n; n.

récursif en(nlogk)[AHU83]. Désignons parhle nombre de vecteurs maxi-maux jMj. On peut vérier si un point pde P est maximal ou non en temps

O(logh). L'épuration des paquets P i

=M se fait donc en O(nlogh). Chaque point p maximal de P a été détecté en prenant l'élément lexicographique maximal d'un sous-paquet de taille au plus d

n k

e. La complexité c 3

(n;h) de cet algorithme est:

c 3

(n;h)=O(nlogk+nlogh+h n k

):

Toute la diculté réside à trouver la bonne valeur de k qui assure une complexité sensible à la sortie. C'est-à-dire que le facteur nlogk ne doit pas masquer le nlogh et le facteurh

n

k ne doit pas être supérieur à nlogh. Si on choisit k=h, on obtient:

c 3

(n;h)=(nlogh):

Malheureusement, on ne connait pas la valeur de h. Mais au fur et à mesure du déroulement de l'algorithme nous obtenons une approximation de

h. L'idée est donc de xerkau début de l'algorithme à une constante (disons

k 0 = 1, ainsi h 0 = 2 k 0

= 2 par exemple) puis de rentrer dans la boucle principale jusqu'àjMj=1=2

k0

1auquel cas nous savons queh1et nous pouvons autoriser un ranement du tri en h

1 = 2h 0 (k 1 = k 0 +1) paquets de taille n 2 k

1 puis nous continuons la boucle principale jusqu'à jMj=2 k

1 1, etc. Nous aboutissons à l'algorithme 3.11.

À la sortie de l'algorithme, nous avons k  dlog 2

(h +1)e. L'étape de partionnement des données Q (initialement Q = P) est exécutée au plus

O(logh)fois. Chaque partitionnement prend au plus un temps linéaireO(n). La mise à jour du partitionnement prend donc un tempsO(nlogh). Notonst

le nombre de fois où l'algorithme a appelé unscreeningproblème, nous avons:

C d (n;h)O(nlogh)+ t X i=1 F d 1 (n i ;h); t X i=1 n i =O(n):

Dans le cas tridimensionnel, nous pouvons pousser l'analyse de l'algo-rithme. En eet, nous avons F

2 (n

i

;h)=O(n i

logh). On en déduit ainsi faci-lement l'optimalité pour d=3.

Corollaire 2 L'algorithme 3.11 calcule les h vecteurs maximaux d'un en-semble de n vecteurs P en temps optimal pour d=2;3 en (nlogh).

Algorithme 3.11: Algorithme adaptatif de calcul des vecteurs maximaux. Fonction Maxima(P =fp 1 ;:::;p n g): maxima; début M ;; k 1; Q P;

(*Q est une queue de priorité contenant les paquets partitionnant P *) Tant queQ6=; faire

PaquetCourant Premier(Q);

PaquetCourant PaquetCourant=M; Tant que PaquetCourant6=; faire

x LexicographiqueMax(PaquetCourant); PaquetCourant PaquetCourantnfxg; M M[fxg; sijMj=2 k 1 alors début Pour chaque S2Q avec jSj

n 2 k faire Partitionner S en S 1 ;S 2 de taille au plus d jSj 2 e; (* avec S 1 < L S 2 *) Remplacer S par S 1 etS 2 dans Q; n; k k+1; n; n; n; (* tant que *) n.

On voit qu'il faut raner l'opération descreeningen dimension supérieure an de donner un borne supérieure pour P

t

i=1Fd 1(ni;h). L'article de Kirk-patrick et Seidel [KS85] poursuit cette analyse en l'appliquant au problème du screening puis utilise cette borne et d'éventuelles conditions (celles don-nées dans la table 3.2) an de donner des résultats globaux sur le problème du calcul des vecteurs maximaux. Nous conseillons au lecteur intéressé de se rapporter à l'article [KS85] pour la suite de cette étude.

3.2.3 Un nouvel algorithme optimal pour le calcul des

Dans le document Algorithmes géométriques adaptatifs (Page 52-59)