Sa presupunem ca multimea Q are k straturi nevide.
Fie yi coordonata y a celui mai din stanga punct din stratul Li,
pentru fiecare i = 1, 2, . . . ,k. Se demonstreaza ca y1 > y2 > ... > yk.
Dandu-se un punct (x, y) care are
- coordonata x mai mica decat a oricarui punct din Q (este "la stanga"
tuturor punctelor din Q), si
- coordonata y diferita de a oricarui punct din Q,
atunci definim Q0 = Q + (x, y).
Daca y < yk, atunci luam j = k + 1, altfel j este indicele minim astfel incat
yj < y. Se demonstraza ca:
- daca j <= k, straturile multimii Q0 sunt la fel cu cele ale multimii Q,
cu deosebirea ca stratul Lj include si punctul (x, y) ca "cel mai din
stanga" punct al sau.
- daca j = k + 1, atunci primele k straturi ale lui Q0 sunt identice cu
cele ale lui Q, si in plus la Q0 se adauga stratul (k + 1) format din
punctul (x,y) : Lk+1 = (x, y).
De aici decurge algoritmul de rezolvare (N logN):
a) Se sorteaza punctele descrescator dupa x (NlogN).
b) Pentru fiecare punct (x,y), in ordine descrescatoare a x-ului, se cauta
stratul j in care va fi asezat acest punct:
Fie k numarul de straturi care s-au construit deja:
Daca y < yk, atunci luam j = k + 1, se creeaza un strat nou in care se
pune punctul (x,y), altfel j este indicele minim astfel incat yj < y, si
se adauga (x,y) la stratul j.
Cautarea stratului e logN, ori N puncte => N logN.
|
|