notatka

Transkrypt

notatka
Definicje
Forma i odlew
Wykład 4
2006/10/25
Problem
PROBLEM „wyjęcia z formy”
Dane: odlew P z górną ścianą g
Pytanie:
• czy istnieje wektor d taki, że P może być
przesunięty w nieskończoność w kierunku
d, nie przecinając MP
• jeśli istnieje: podać taki wektor d.
• Odlew: wielościan P, z wyróżnioną górną
ścianą g (pozostałe ściany nazywamy
zwykłymi)
• Forma: prostopadłościan MP zawierający
„otwór” o kształcie P, górna ściana P
pokrywa się z górną ścianą MP
[w układzie współrzędnych: możemy
przyjąć, że górna ściana MP zawiera się w
płaszczyźnie z = c dla stałej c]
Definicja
Niech out(f) dla ściany f wielościanu P oznacza
wektor prostopadły do ściany f, skierowany na
zewnątrz P.
Twierdzenie
Wielościan P o górnej ścianie g może być „wyjęty z
formy” w kierunku d wtw gdy d tworzy kąt ≥900 z
out(f) dla każdej ściany zwykłej f∈P.
Dowód
Formy a programowanie liniowe
⇒ Oczywiste (patrz ściany „stowarzyszone” z P i MP)
⇐ Zał, że punkt p∈P „zahacza” o MP (przecina
ścianę). Wtedy:
• długość d nieistotna
• d=(dx,dy,dz) może być rozwiązaniem tylko gdy dz>0
[bo górna ściana równoległa do płaszczyzny z=0]
• a zatem wszystkie możliwe kierunki d możemy
reprezentować przez wektory d=(dx,dy,1), gdzie dx,
dy dowolne
Inaczej: wszystkie kierunki reprezentowane przez
punkty na płaszczyźnie z = 1.
• p to wierzchołek P (jeśli P „zahacza”, to również jego
wierzchłek)
• niech p przecina się ze ścianą f’w MP odpowiadającą f w
P
• wtedy kąt między out(f) i d mniejszy od 900
[rysunek...]
Kąty i nierówności
Kąt między wektorami a i b jest ≥900 wtw ich iloczyn
skalarny jest ≤0.
A zatem, d=(dx,dy,1) jest kierunkiem wyjęcia P wtw
gdy
dx∗out(f)x + dy ∗ out(f)y ≤ -out(f)z
dla każdej zwykłej ściany f∈P
Problem przecięcia półpłaszczyzn:
Dane: półpłaszczyzny h1,...,hn, gdzie hi zdefiniowana
przez nierówność
ai ∗ x + bi ∗ y ≤ ci
Wynik: punkt d=(dx,dy) należący do h1∩... ∩hn, lub
informacja, że h1∩... ∩hn=∅
WNIOSEK
Problem wyjęcia z formy można w liniowym czasie
zredukować do problemu (niepustości) przecięcia
półpłaszczyzn.
Jak rozwiązywać problem przecięcia?
Podejście 1:
• Wyznacz obszar C wypukły będący przecięciem
h1∩... ∩hn
• podaj dowolny punkt obszaru C
Podejście 2:
Sformułuj jako zadanie programowania liniowego
(LP):
znajdź max (c1 x + c2 y)
przy ograniczeniach ai ∗ x+ bi ∗ y ≤ ci, dla i=1,...,n
gdzie c1, c2 dowolne
Możliwe rozwiązania probl. przecięcia
• wielokąt wypukły
• zbiór pusty
• obszar wypukły nieograniczony, brzeg utworzony
przez odcinki i półproste
Możliwe rozwiązania progr. liniowego
Podejście przyrostowe (LP)
• jedno rozwiązanie [wielokąt lub obszar
nieograniczony, wektor (c1,c2) nie jest prostopadły
do żadnego boku]
• brak [zbiór pusty lub obszar nieograniczony]
• zbiór nieskończony tworzący odcinek [ obszar
nieograniczony lub wielokąt ]
Dane:
• H={h1,...,hn}, gdzie hi zdef. przez ai, bi, ci jak wcześniej
• wektor c=(c1,c2)
• założenie c nie jest prostopadły do żadnej prostej ogr. hi
Algorytm LP:
1. Sprawdź czy w ogóle istnieje rozwiązanie (jak?)
2. Jeśli istnieje: wybierz ha, hb dla których istnieje
rozwiązanie i ustal rozwiązanie v0
3. Dla i=1,...n:
1. jeśli vi-1∈hi to vi ← vi-1
2. jeśli vi-1 ∉ hi: Modyfikuj({h1,...,hi-1}, hi, c)
Podejście przyrostowe c.d.
Modyfikuj({h1,...,hp}, h, c)
Niech l1, ...,lp,l –proste ograniczające h1,..,hn,h
Wybierz p∈l taki, że:
a) p ∈ hi dla każdego i=1,..,p
b) p daje maksymalną wartość c1∗ px + c2 py wśród
punktów spełniających (a)
Jak to zrobić?
• wyznacz l∩h1∩... ∩hp [jest to odcinek lub półpr.]
• wybierz na tym odcinku jego koniec o większej
wartości c1∗ px + c2 py
Analiza
Czas: O(n2)
Jak zrobić to lepiej?
• najpierw utwórz losową permutację h1,...,hn
• liczymy nie czas najgorszego przypadku ale średni
• ALE: czas średni po wszystkich permutacjach (nie
po inputach)
• i wybieramy najgorszy średni czas (dla najbardziej
złośliwych danych – o ile jakieś dane będą w ogóle
bardziej złośliwe)
LEMAT 1
Niech Ci=h1 ∩... ∩ hi, niech vi to unikalne
rozwiązanie programu liniowego {h1,...,hn}, c.
Wtedy:
• jeśli vi∈hi+1, to vi+1=vi
• jeśli vi∉hi+1, to Ci+1=∅ lub vi+1 ∈li+1, gdzie li to
prosta ograniczająca hi
Lemat 1 – uzasadnienie algorytmu
Analiza algorytmu zrandomizowanego
Oznaczenia:
Ti – czas wykonania i-tej iteracji:
• O(1) jeśli vi-1 należy do hi
• O(i) jeśli vi-1 nie należy do hi
E[Ti] – wartość oczekiwana czasu i-tej iteracji
T – czas całego algorytmu, E[T] – wartość oczek. T
Analiza algorytmu zrandomizowanego
Sprawdź czy w ogóle istnieje rozwiązanie
E[T] = E[T1+...+Tn] = E[T1]+...+E[Tn]
Dane:
• H={h1,...,hn}, gdzie hi to półpłaszczyzna zdef. przez ai, bi,
ci jak wcześniej
• wektor c=(c1,c2)
• założenie c nie jest prostopadły do żadnej prostej ogr. hi
Wynik:
• i, j takie, że zadanie liniowe dla funkcji celu c i
półpłaszczyzn hi, hj ma rozwiązanie LUB
• informacja, że zadanie sprzeczne [gdy część wspólna
wszystkich hi jest pusta] LUB
• półprosta z części wspólnej wszystkich hi, wzdłuż której
funkcja c rośnie do nieskończoności [gdy zad. nieogr.]
liniowość wart.oczek.
E[Ti] = O(i ∗2/(i-2) )
„analiza wsteczna”
• vi jest p-tem przecięcia dwóch prostych,
ograniczających dwie półpłaszczyzny
• z prawdopodobieństwem 2/(i-2) któraś z tych
półprostych nie występuje w h1,...,hi-1
E[T]=O(n)
Sprawdź( H={h1,...,hn}, c=(c1,c2))
Sprawdź czy w ogóle istnieje rozwiązanie
Definicja. Kierunkiem półpłaszczyzny hi zdefiniowanej przez
nierówność
ai x + bi y ≤ ci
nazywamy wektor prostopadły do prostej ai x + bi y = ci, skierowany do
wnętrza półpłaszczyzny hi.
Definicja. Kierunek „góra” to kierunek wektora (0,1)
Definicja. Odległością wektorów u i v nazywamy mniejszy z kątów
wyznaczonych przez wektory u i v.
1.
2.
3.
4.
5.
6.
7.
Zmień współrzędne tak, aby c=„dół”, czyli c=(0,-1)
Wybierz półprzestrzeń hk o kierunku najbliższym „góra”
Wyznacz część wspólną K wszystkich hi takich, że |ai|=ak
Jeśli K=∅, zwróć informację, że zad. sprzeczne i zakończ
Niech lj oznacza prostą na granicy hj dla j=1..n
Niech li to dolne ograniczenie K
Dla każdego j takiego, że aj≠ ai:
1.
Jeśli li∩hj ograniczona: zwróć [ograniczone] i oraz j i zakończ
8. Zwróć: zadanie nieogranicznoe
Lemat
Niech i będzie takie, że li to dolne ograniczenie K w
algorytmie Sprawdz(H, c). Wówczas:
• Jeśli li∩hj nieograniczona w dół dla każdego j takiego, że
aj≠ ai to zadanie H, c jest nieograniczone.
• Jeśli li∩hj ograniczona w dół dla pewnego j takiego, że aj≠
ai to zadanie (H, c) jest ograniczone lub sprzeczne
Progr. liniowe w d wymiarach c.d.
h1,..,hn– półprzestrzenie;
g1,..,gn– podprzestrzenie „brzegowe” dla h1,..,hn
c – funkcja celu
4. Szukanie rozw. zadania h1,..,hi-1 na podrzestrzeni gi
• wyznacz p1,..,pi-1 – rzuty h1,..,hi-1 na gi
• wyznacz rzut c’ funkcji celu c na gi
• rozwiąż zadanie programowania liniowego w d-1
wymiarach dla półprzestrzeni p1,..,pi-1 i funkcji celu c’.
Progr. liniowe w d>2 wymiarach
h1,..,hn– półprzestrzenie;
g1,..,gn– podprzestrzenie „brzegowe” dla h1,..,hn
Jak wcześniej:
1. algorytm przyrostowy
2. losowe uporządkowanie półprzestrzeni
3. najpierw wybieramy d półprzestrzeni mających
ograniczone rozwiązanie
4. jeśli rozwiązanie dla h1,..,hi-1 należy do hi, to jest
rozwiązaniem dla h1,..,hi
5. jeśli rozwiązanie dla pierwszych h1,..,hi-1 NIE należy do
hi, to NOWE rozwiązanie (dla h1,..,hi) jest punktem
leżącym do gi
Progr. liniowe w d wymiarach c.d.
CZAS (oczekiwany!):
n
d
T (d −1, i)
i
−
d
i =d +1
T (d, n) ≤ O(dn) + ∑
T (d , n) = O (d !n)
Problem najmniejszego koła
Dane:
• P={p1,..,pn} – zbiór punktów na płasczyźnie
Wynik:
• D – najmniejsze koło zawierające P
Oznaczenia:
• Pi={p1,..,pi}
• Di – najmniejsze koło dla zbioru Pi
Problem najmniejszego koła c.d.
Problem najmniejszego koła
Algorytm MiniDisc(P):
1. Wyznacz losową permutację p1,..,pn
2. Wyznacz D2
3. Dla i=3,4,..,n
1. Jeśli pi ∈ Di-1, to Di =Di-1
2. w przeciwnym razie:
Di = MiniDiscWithPoint({p1,..,pi-1}, pi)
Problem najmniejszego koła c.d.
Algorytm MiniDiscWithPoint(P, q)
Dane: P={p1,..,pn}, q – punkty na płaszczyźnie
Wynik: Najmniejsze koło zawierające P, z q na brzegu
1. Wyznacz losową permutację p1,..,pn
2. Niech D1 to najmniejsze koło zawierające p1 i q na brzegu
3. Dla i=2,..,n
1. Jeśli pi∈ Di-1, to Di =Di-1
2. w przeciwnym razie:
Di = MiniDiscWithTwoPoints({p1,..,pi-1}, pi,q)
Algorytm MiniDiscWithTwoPoints(P, q1, q2)
Dane: P={p1,..,pn}, q1, q2 – punkty na płaszczyźnie
Wynik: Najmniejsze koło zawierające P, z q1, q2 na
brzegu
1. Niech D0 to najmniejsze koło zawierające q1, q2 na
brzegu
2. Dla i=1,..,n
1. Jeśli pi∈ Di-1, to Di =Di-1
2. w przeciwnym razie:
Di = koło (unikalne) z q1, q2 i pi na brzegu.
Problem najmniejszego koła c.d.
Problem najmniejszego koła c.d.
Czas:
• MiniDiscWithTwoPoints działa w czasie O(n)
• MiniDiscWithPoint działa w oczekiwanym czasie
O(n)
• MiniDisc działa w oczekiwanym czasie O(n)
Idea oszacowań:
• korzystamy z faktu, że Di≠Di-1 z
prawdopodobieństem nie większym niż 3/i
Poprawność:
Niech P, R – rozłączne zbiory punktów (R może być
pusty), p∈P.
1. Jeśli istnieje koło zawierające P i takie, że
wszystkie elementy R są na brzegu tego koła,
wówczas jest tylko jedno takie koło md(P,R) o
najmniejszym promieniu.
2. p ∈md(P-{p},R) ⇒ md(P,R)=md(P-{p},R)
3. p ∉md(P-{p},R) ⇒ md(P,R)=md(P-{p},R∪{p})
(czyli najmniejsze koło po dołączeniu p musi mieć
p na swoim brzegu)

Podobne dokumenty