Przejdź do zawartości

Algorytm Grahama

Z Wikipedii, wolnej encyklopedii
Algorytm Grahama
Rodzaj

znajdowanie otoczki wypukłej

Złożoność
Czasowa

Algorytm Grahama – efektywny algorytm wyszukiwania otoczki wypukłej skończonego zbioru punktów płaszczyzny; nie istnieją warianty dla przestrzeni o wyższych wymiarach. Pomysłodawcą algorytmu jest Ronald Graham[1].

Czasowa złożoność obliczeniowa wynosi

Algorytm przebiega następująco:

  1. Wybierz punkt (ozn. O) o najniższej wartości współrzędnej y.
  2. Przesuń wszystkie punkty tak, by punkt O pokrył się z początkiem układu współrzędnych.
  3. Posortuj punkty leksykograficznie względem:
    • kąta pomiędzy wektorem a dodatnią osią układu współrzędnych,
    • odległości punktu od początku układu współrzędnych.
  4. Wybierz punkt (ozn. S) o najmniejszej współrzędnej y; jeśli kilka punktów ma tę samą współrzędną y, wybierz spośród nich ten o najmniejszej współrzędnej x.
  5. Przeglądaj listę posortowanych punktów poczynając od punktu S:
    • Od bieżącej pozycji weź trzy kolejne punkty (ozn. A, B, C).
    • Jeśli punkt B leży na zewnątrz trójkąta AOC, to może należeć do otoczki wypukłej. Przejdź do następnego punktu na liście.
    • Jeśli punkt B leży wewnątrz trójkąta AOC, to znaczy, że nie należy do otoczki. Usuń punkt B z listy i cofnij się o jedną pozycję (o ile bieżąca pozycja jest różna od początkowej).

Ze względu na wcześniejsze kroki algorytmu (sortowanie i sposób wybierania analizowanych trójek punktów) dwa z trzech warunków należenia punktu B do trójkąta AOC są spełnione, tj. B leży po „wewnętrznej” względem trójkąta stronie prostych OA i OC. Zatem do stwierdzenia przynależności do trójkąta wystarczy zbadać, po której stronie odcinka AC znajduje się punkt B, w tym celu wykorzystuje się znak iloczynu wektorowego

W praktyce można również utożsamić krok 4. z 1., tzn. przyjąć, że

Zobacz też

[edytuj | edytuj kod]

Przypisy

[edytuj | edytuj kod]
  1. Ronald Graham. An efficient algorithm for determining the convex hull of a finite planar set. „Information Processing Letters”. 1, s. 132–133, 1972. (ang.). 

Bibliografia

[edytuj | edytuj kod]
  • Mark de Berg, Mirosław Kowaluk: Geometria obliczeniowa. Algorytmy i zastosowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 2007. ISBN 978-83-204-3244-2.
  • Lech Banachowski, Krzysztof Diks, Wojciech Rytter: Algorytmy i struktury danych. Warszawa: Wydawnictwa Naukowo-Techniczne, 2003, s. 263–267. ISBN 83-204-2796-7.