Algorytm Jarvisa, marsz Jarvisa lub owijanie prezentów (ang.gift wrapping algorithm) – metoda wyznaczania otoczki wypukłej zbioru punktów umieszczonych na płaszczyźnie lub przestrzeni o większej liczbie wymiarów.
Algorytm został niezależnie opracowany przez Donalda Chanda oraz Shama Kapura (1970)[1] oraz R. Jarvisa (1973, przypadek na płaszczyźnie)[2].
Algorytm działa w czasie gdzie to całkowita liczba punktów, natomiast to liczba punktów należących do otoczki. Zwykle w praktyce jednak w pesymistycznym przypadku złożoność czasowa może wynieść
Przebieg algorytmu Jarvisa dla przykładowych danych
Zamiast rozpatrywać dwa osobne łańcuchy, można od razu utworzyć całą otoczkę.
– punkt na otoczce wypukłej o najmniejszej współrzędnej y (jeśli jest więcej niż jeden, wybierany jest ten o najmniejszej współrzędnej x),
powtarzaj:
– punkt dla którego kąt jest największy,
jeśli koniec iterowania,
ostatecznie otoczkę tworzą punkty
Implementację można usprawnić, odrzucając w każdej iteracji punkty znajdujące się po prawej stronie wektora ponieważ na pewno nie będą należały do otoczki. Zabieg ten nie wpływa jednak na asymptotyczną złożoność obliczeniową algorytmu.
Lech Banachowski, Krzysztof Diks, Wojciech Rytter: Algorytmy i struktury danych. Warszawa: Wydawnictwa Naukowo-Techniczne, 2003, s. 267–268. ISBN 83-204-2796-7.