Temat: Geometria obliczeniowa część II. Para najmniej odległych
Transkrypt
Temat: Geometria obliczeniowa część II. Para najmniej odległych
Temat: Geometria obliczeniowa cz
II. Para najmniej
odległych punktów. Sprawdzenie, czy istnieje para
przecinaj cych si odcinków.
1. Para najmniej odległych punktów
WP: Dany jest n - elementowy zbiór punktów na
płaszczy nie. Oznaczmy ten zbiór przez
P = {p1 , p2 ,..., pn }. Punkty mog si pokrywa .
WK: Znale takie i oraz j, e i≠j, a odległo
mi dzy punktami p i i p j jest najmniejsza.
Algorytm naiwny
Obliczamy odległo ( wystarczy policzy kwadrat odległo ci)
dla wszystkich par punktów ze zbioru P. Wybieramy
najmniejsz odległo i ustalamy dla jakiej pary punktów
zachodzi ten wynik.
Koszt czasowy algorytmu naiwnego
Liczba par punktów do sprawdzenia wynosi
2
algorytmu jest Θ(n )
n
2
. St d koszt
1
Algorytm oparty na zasadzie "dziel i zwyci aj"
1. Punkty zbioru P umieszczamy w dwóch
tablicach X i Y.
2. Sortujemy tablic X wzgl dem niemalej cej warto ci
współrz dnej x.
3. Sortujemy tablic Y wzgl dem niemalej cej warto ci
współrz dnej y.
4. Znajdujemy pionow prost l, dziel c podzbiór P
na dwa podzbiory PL i PR takie, e :
P
P
PL =
P
=
R
2 i
2 i wszystkie punkty podzbioru
PL le na lewo od prostej l, a wszystkie punkty PR le po
prawej stronie prostej l. Punkty, które le
na prostej
zaliczamy zarówno do PL jak i do PR . Tablica X zostaje
podzielona na dwie tablice X L i X R , zawieraj ce
odpowiednio punkty PL i PR , posortowane niemalej co
wzgl dem współrz dnej x. Analogicznie, tablica Y zostaje
podzielona na dwie tablice YL i YR , zawieraj ce odpowiednio
punkty PL i PR , posortowane niemalej co wzgl dem
współrz dnej y.
2
5. Sprawdzamy, czy PL ≤ 3 . Je eli tak, to stosujemy metod
naiwn , czyli sprawdzamy wszystkie pary punktów w
podzbiorze PL . S co najwy ej trzy takie pary. Je eli
natomiast PL > 3 to realizujemy rekurencyjne wywołanie
dla danych PL, XL i YL
6. Sprawdzamy, czy PR ≤ 3 . Je eli tak, to stosujemy metod
naiwn , czyli sprawdzamy wszystkie pary punktów w
podzbiorze PR . S co najwy ej trzy takie pary. Je eli
natomiast PR > 3 to realizujemy rekurencyjne wywołanie
dla danych PR, XR i YR
7. Oznaczmy odległo ci par najbli szych siebie punktów
obliczone dla PL i PR odpowiednio przez δ L i δ R i niech
δ = min(δ L , δ R ) .
8. Para najmniej odległych punktów jest albo par o
odległo ci δ znalezion przez jedno z wywoła
rekurencyjnych, albo par , w której jeden punkt nale y do
PL , a drugi do PR . Algorytm sprawdza, czy istnieje taka
para o odległo ci mniejszej ni δ . Je eli taka para istnieje
to ona wła nie jest wynikiem algorytmu, je eli natomiast
taka para nie istnieje, to wynikiem jest para o odległo ci
δ .
3
1
10
4
2
3
6
11
5
7
8
II
I
9
II
X = {8, 1, 2, 6, 4, 7, 5, 10, 3, 9, 11}
Y = {8, 9, 7, 5, 2, 6, 3, 11, 4, 10, 1}
XL = {8, 1, 2, 6, 4}
YL = {8, 2, 6, 4, 1}
XR = {7, 5, 10, 3, 9, 11}
YR = {9, 7, 5, 3, 11, 10}
XLL = {8, 1, 2} XLR ={6, 4} XRL = {7, 5, 10} XRR = {3, 9, 11}
YLL = {8, 2, 1} YLR = {6, 4} YRL = {7, 5, 10} YRR = {9, 3, 11}
1-2
4-6
7-5
3 - 11
2 - 6
7 - 5
2 - 6
4
Algorytm sprawdzania, czy istnieje taka para punktów
e jeden z punktów pary nale y do PL , a drugi do PR i
odległo mi dzy tymi punktami jest mniejsza od
δ = min(δ L , δ R )
Zauwa my, e je li istnieje para punktów o odległo ci
mniejszej ni δ , to obydwa punkty nie mog by poło one
dalej ni δ od prostej l. Zatem obydwa punkty musz si
mie ci wewn trz pionowego pasa szeroko ci 2δ wokół
prostej l.
PL
PR
2σ
σ
l
5
W celu znalezienia takiej pary punktów, o ile istniej , które s
od siebie najmniej odległe i mieszcz si w pasku o szeroko ci
2σ, algorytm wykonuje nast puj ce operacje:
1. Tworzy tablic Y ' , otrzyman z tablicy Y przez usuni cie z
niej wszystkich punktów spoza pionowego paska o
szeroko ci 2σ. Tablica
współrz dnej y.
Y'
jest posortowana wzgl dem
2. (*)Dla ka dego punktu p z tablicy
Y'
algorytm próbuje
znale punkty w Y ' le ce w promieniu σ od p. Tylko
takie punkty mog by odległe od p o mniej ni o σ.
Okazuje si , e wystarczy rozwa y siedem takich punktów
z tablicy Y ' nast puj cych po p. Algorytm oblicza
odległo od p do ka dego z tych siedmiu punktów i
przechowuje najmniejsz znalezion odległo σ ' mi dzy
parami punktów w
Y'.
3. Je li σ ' < σ , to pionowy pas zawiera par punktów
poło onych bli ej ni te znalezione w wywołaniu
rekurencyjnym. Jako wynik jest zwracana owa para i jej
odległo σ ' . W przeciwnym razie jest zwracana para
najmniej odległych punktów znaleziona w wywołaniu
rekurencyjnym i jej odległo σ .
6
Uzasadnienie faktu, e kroku w (*) wystarczy sprawdzi tylko
siedem punktów
PL
PR
2σ
σ
pR
σ
pL
PR
PL
σ
σ
l
l
a)
b)
Je li p L ∈ PL i pR ∈ PR s od siebie odległe o mniej ni σ, to
musz si mie ci wewn trz prostok ta σ × 2σ, przez
którego rodek przechodzi prosta l (rys. a)). Poniewa
wszystkie punkty zbioru PL s od siebie odległe co najmniej o
σ, wewn trz kwadratu σ ×σ ( "lewa" połówka prostok ta
σ × 2σ ) mog si znajdowa co najwy ej cztery punkty (rys.
b)). Analogicznie, poniewa wszystkie punkty zbioru PR s od
siebie odległe co najmniej o σ, wewn trz kwadratu
σ ×σ ( "prawa" połówka prostok ta σ × 2σ) mog si
znajdowa równie co najwy ej cztery punkty. W całym
prostok cie σ × 2σ mo e si wi c znajdowa co najwy ej
osiem punktów. Skoro para najmniej odległych punktów to
7
pL i pR , to mo emy bez straty ogólno ci przyj , e pL
poprzedza pR w tablicy Y '. Wówczas, nawet je li pL wyst puje
najwcze niej, a pR najpó niej jak tylko mo na w tablicy Y ',
punkt p R jest na jednej z siedmiu pozycji nast puj cych po
pL .
Koszt czasowy algorytmu znajdywania najmniej odległej pary
punktów
Koszt sortowania wst pnego (przed pierwszym wywołaniem
rekurencyjnym) tablic X i Y wynosi Θ(nlogn). Dzi ki temu, e
tablica X jest posortowana, krok polegaj cy na rozdzieleniu
zbioru punktów P na podzbiory PL i PR mo na łatwo
zrealizowa w czasie liniowym. Dzi ki temu, e tablica Y jest
posortowana, stał liczb porówna mo na zrealizowa krok
polegaj cy na sprawdzeniu, czy istniej dwa punkty, le ce po
jest
przeciwnych stronach prostej l, których odległo
mniejsza od δ = min(δ L , δ R ) .
Posortowane tablice zostaj przekazane jako parametry
pierwszego wywołania rekurencyjnego, a potem rozdziela si
je (pod warunkiem, e zawieraj co najmniej trzy punkty) na
dwie, równie posortowane tablice: z tablicy X otrzymujemy
tablice XL i XR , a tablicy Y otrzymujemy tablice YL i YR .
Wszystkie cztery tablice równie musz by posortowane.
Aby unikn ponownego sortowania całych tablic, podczas
rozdzielania tablic X i Y stosujemy technik podobn , ale
odwrotn do procedury MERGE (scalania) w algorytmie
sortowania MergeSort.
8
Pseudokod procedury rozdzielania tablicy Y na tablice YL i YR
(Oznaczenie: length[Y] - liczba elementów w tablicy Y)
length[YL]=0; length[YR]=0;
for (i=0; i< length[Y]; i++)
if (Y[i]∈ PL) {
length[YL]= length[YL]+1;
Y[length[YL]]=Y[i];
}
else {
length[YR]= length[YR]+1;
Y[length[YR]]=Y[i];
}
Podobnie wygl da pseudokod tworzenia tablic XL i XR.
Dzi ki wykorzystaniu powy szej metody rozdzielania tablic
równanie rekurencyjne kosztu całego algorytmu (bez
wst pnego sortowanie) jest nast puj ce :
T (n ) =
2T (n / 2 ) + O (n ), je li n > 3
O (1),
je li n ≤ 3
St d T (n ) = O(n log n ) .
9
2. Algorytm sprawdzania, czy jakakolwiek para odcinków
si przecina - metoda "zamiatania"
WP: Dany jest n - elementowy zbiór S = {l1 , l2 ,..., ln } (n≥3),
n odcinków, z których aden odcinek nie jest pionowy
i adne trzy odcinki nie przecinaj si w tym samym
punkcie.
WK: Trzeba sprawdzi , czy istnieje par odcinków li , l j taka,
e i ≠ j oraz odcinki li , l j przecinaj si .
Algorytm naiwny
Sprawdzamy wszystkie mo liwe pary odcinków. Koszt
n
2
algorytmu naiwnego jest równy 2 = Θ(n )
Technika "zamiatania"
Metoda polega na przesuwaniu po płaszczy nie ("zamiataniu")
prostej pionowej ("miotły") od strony lewej do prawej i
wykonaniu
oblicze
dla
napotkanych
obiektów
geometrycznych. W danym kroku oblicze ka dy obiekt jest
albo przetworzony, albo aktywny, albo oczekuj cy. Obiekty
przetworzone znajduj si zawsze po lewej stronie miotły i
wszystkie obliczenia z nim zwi zane s ju zako czone.
Obiekty aktywne s aktualnie przetwarzane, natomiast obiekty
10
oczekuj ce znajduj si po prawej stronie miotły i obliczenia z
nimi zwi zane b d dopiero wykonywane. Miotła "startuje" w
poło eniu obiektu o najmniejszej współrz dnej x.
Realizacja metody zamiatania w algorytmie sprawdzania, czy
istnieje para przecinaj cych si odcinków
W ka dym poło eniu miotły odcinkami przetworzonymi s
wszystkie odcinki, których obydwa ko ce znajduj si na lewo
od miotły. Odcinkami aktywnymi s te, które przecinaj
miotł . Do odcinków oczekuj cych zaliczaj si odcinki o obu
ko cach poło onych na prawo od miotły. Poniewa nie ma
odcinków pionowych, ka dy z wej ciowych odcinków
przechodz cych przez miotł w danym poło eniu, przecina si
j w jednym punkcie. Mo na wi c uporz dkowa odcinki
przecinaj ce miotł ze wzgl du na współrz dne y punktów
przeci cia.
Je eli dwa odcinki li i l j nie przecinaj si , to mówimy, e s
one porównywalne w s, je li miotła w poło eniu s przecina
li le y powy ej l j w s, co
> s l j , je li li i l j s porównywalne w s, a
obydwa z nich. Powiemy, e
zapisujemy li
li z miotł w poło eniu s znajduje si wy ej ni
przeci cie l j .
przeci cie
a
d
b
c
r
t
u
11
a > r c, a > t b, b > t c, a > t c, b > u c ,
odcinek d
porównywalny z adnym z pozostałych odcinków
nie
jest
Relacja > s jest relacj porz dku liniowego dla dowolnego, ale
ustalonego s, w zbiorze odcinków, które przecinaj miotł w
poło eniu s. Porz dek ten mo e by ró ny dla ró nych
warto ci s, poniewa jedne odcinki wchodz do owego zbioru,
a inne go opuszczaj . Odcinek wchodzi do zbioru (staje si
aktywny), gdy miotła przecina jego lewy koniec, a opuszcza
zbiór (staje si przetworzony), gdy miotła trafia na jego prawy
koniec.
Co si dzieje, gdy miotła trafia na punkt przeci cia odcinków?
Ich pozycje w porz dku si zamieniaj .
f
e
v
w
f > v e, ale e > w f
Skoro zakładamy, e adne trzy odcinki nie przechodz przez
ten sam punkt, to musi istnie takie poło enie s miotły , e
przecinaj ce si odcinki s s siednie w sensie relacji
>s .
12
W algorytmach, w których wykorzystuje si metod
zamiatania, s u ywane zazwyczaj dwa zbiory danych:
1. Struktura stanu miotły (y - struktura), okre laj ca relacje
mi dzy obiektami przecinaj cymi miotł , czyli obiektami
aktywnymi.
2. Harmonogram zdarze
(x - struktura), to ci g
uporz dkowany według niemalej cej współrz dnej x
punktów okre laj cych pozycje poło enia dla prostej
zamiataj cej. Ka d tak pozycj nazwiemy zdarzeniem.
Zmiany w strukturze stanu miotły mog zachodzi jedynie
w takich wła nie punktach.
Idea algorytmu
1. Sortujemy ko ce odcinków niemalej co ze wzgl du na
współrz dn x i przetwarzamy je od strony lewej do prawej.
2. Wstawiamy odcinek do struktury stanu miotły, kiedy
napotkamy jego lewy koniec (wtedy odcinek z obiektu
oczekuj cego przechodzi w stan obiektu aktywnego), a
usuwamy ze struktury, gdy napotkamy jego prawy koniec
( obiekt aktywny staje si wówczas przetworzony).
3. Za ka dym razem, kiedy dwa odcinki staj si po raz
pierwszy s siednimi, sprawdzamy, czy si nie przecinaj .
13
e
d
a
c
f
b
a
a a
b c
b
d
a
c
b
d
c
b
e
d
c
b
e
d
b
Przeci cie odcinków d i b zostaje wykryte przy usuwaniu
odcinka c.
Struktura stanu miotły to liniowo uporz dkowany zbiór T, na
którym wykonuje si nast puj ce operacje:
• insert(T, s) - wstawianie odcinka s do zbioru T,
• delete(T, s) - usuwanie odcinak s z T,
• above(T, s) - zwraca odcinek s siedni, bezpo rednio
powy ej odcinka s w T
• below(T, s) - zwraca odcinek bezpo rednio poni ej odcinka
s w T.
14
Pytanie: Jak zaimplementowa struktur stanu miotły, aby
ka d z powy szych operacji mo na było wykona
kosztem pesymistycznym O(logn)?
Pseudokod algorytmu sprawdzania przecinania si odcinków
ANY_INTERSECTION(S)
{
T=∅;
"Tworzymy list L ko ców odcinków zbioru S,
posortowan niemalej co wzgl dem współrz dnej x.
Przy równych współrz dnych x decyduje współrz dna y";
for ("ka dy punkt p ∈ L")
{
if ("p jest lewym ko cem odcinka s")
{
insert(T, s);
if ("above(T, s) istnieje i przecina s
lub below(T, s) istnieje i przecina s")
return 1;
}
if ("p jest prawym ko cem odcinka s")
{
if ("obydwa odcinki above(T, s) i below(T, s)
istniej i above(T, s) przecina below(T, s)")
return 1;
delete(T, s);
}
}
return 0;
}
15
Koszt czasowy algorytmu sprawdzania przecinania si
odcinków
Je li S zawiera n odcinków, to algorytm działa w czasie
O(nlogn). Czas tworzenia posortowanej listy L mo e
optymalnie wynie O(nlogn). P tla wykonuje co najwy ej 2n
kroków, bo tyle co najwy ej zdarze mo e zaj dla n
odcinków. Ka dy krok p tli realizuje si w czasie O(logn),
pod warunkiem, e struktura stanu miotły jest realizowana
optymalnie.
16