ALGO GRAHAMA

background image

Algorytm Grahama

Algorytm Grahama opiera się na następującym
spostrzeżeniu (**):

Każdy punkt

nie będący wierzchołkiem otoczki

wypukłej

musi

należeć do wnętrza trójkąta

o wierzchołkach: O i

dwóch kolejnych wierzchołkach otoczki (lub leży na
jednym z

boków

takiego

trójkąta

).

Punkt

F

nie należy

do

otoczki

ponieważ leży we

wnętrzu trójkąta O

9 E

.

Punkt

C

nie należy

do

otoczki

ponieważ punkt ten leży

na boku trójkąta O

f 9

.

background image

Algorytm

Krok 1: Wybieramy

dowolny

punkt

O leżący

wewnątrz

otoczki

wypukłej, na przykład

centroid

. Umieszczamy w

nim początek układu współrzędnych i obliczamy

współrzędne

punktów wejściowych w

nowym

układzie

współrzędnych.

Krok 2:

Porządkujemy

punkty

9

,

G

, . . . ,

;

względem

współrzędnych biegunowych

(g

N

,

N

), gdzie g

N

jest

kątem nachylenia wektora wodzącego

?

do osi

0,

a

N

jego długością.

Aby nie liczyć pierwiastków, w sortowaniu porównuje
się

&B &(

N

)

zamiast

g

N

oraz

N

G

zamiast

N

.

Z uporządkowanych punktów tworzymy

dwukierunkową listę cykliczną

, w której dla

każdego

punktu

p

:

−>

jest

następnym

(cyklicznie)

punktem w wyżej zdefiniowanym porządku, a

−>

poprzednim

.

Spośród punktów o

najmniejszej współrzędnej

ustalamy punkt z

najmniejszą współrzędną

.

Krok 3:

Przeglądamy punkty na liście,

usuwając te

, które

nie są

wierzchołkami otoczki wypukłej

. Po zakończeniu

działania algorytmu lista będzie zawierała tylko
wierzchołki otoczki wypukłej w kolejności ich
występowania na obwodzie. Listę

przeglądamy

,

background image

zaczynając

od

punktu

i kierując się w

stronę

przeciwną do ruchu wskazówek zegara

( zgodnie ze

wskaźnikiem next).

W celu wyeliminowania zbędnych punktów zawsze
sprawdzamy

trzy kolejne punkty

9

,

G

i

E

z bieżącej

listy. Jeśli punkt

G

leży wewnątrz trójkąta

9 E

to

usuwamy go

z otoczki i

przechodzimy

do sprawdzania

punktów

8

,

9

i

E

. W

przeciwnym razie

kolejną

badaną

trójką

punktów

G

,

E

,

C

.

Przeglądanie

kończymy

z chwilą osiągnięcia

wierzchołka

startowego

.

Algorytm realizujący Krok 3 można zapisać następująco:

q=s;

while

(q->next != s) do

if

“q->next leży wewnątrz trójkąta

O q q->next->next”

{

q->next=q->next->next;

q->next->prev=q;

if

(q != s) q=q->prev;

}

else

q=q->next;

background image

Koszt czasowy algorytmu Grahama

Na złożoność algorytmu Grahama

decydujący

wpływ

ma

Krok

2.

Kroki

1 i 3 wykonywane są w czasie

liniowym. Krok 2 można zrealizowany w czasie

log , stosując efektywną metodę sortowania (np.

sortowanie przez scalanie, sortowanie przez połówkowe
wstawianie czy sortowanie szybkie

).

Łatwo zauważyć, że

zamiast sprawdzać

, czy punkt

leży wewnątrz trójkąta

można testować, czy

leży po lewej

stronie

(lub

należy

do) wektora

.

Złożoność algorytmu Grahama

nie zależy od liczby

punktów otoczki wypukłej

.


Wyszukiwarka

Podobne podstrony:
algo wyk8 id 57442 Nieznany (2)
1-algo~1, wisisz, wydzial informatyki, studia zaoczne inzynierskie, podstawy programowania, l2
Wypracowanie algo
Grahamki z parówkami, Dieta Dukana - przepisy różne
Algo,E Wszystkie drogi prowadz Nieznany (2)
Sylwetka twórcza Mastertona, Fantastyka, Graham Masterton
ALGO JARVISA
ściaga algo
Mechanizmy wytwarzania strachu u Grahama Mastertona, Fantastyka, Graham Masterton
Algo r 3
graham, Dzieciństwo i młodość [edytuj]
algo zadania egzamin
ALGO
Aun hay algo, Teksty i tłumaczenia piosenek RBD
algo zadania egzamin
Bułeczki grahamowe ze słonecznikiem i czosnkiem, KUCHNIA
Wypracowanie algo kompletne
Grahamka na słodko

więcej podobnych podstron