• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Najbardziej oddalone punkty

Object Storage Arubacloud
0 głosów
192 wizyt
pytanie zadane 7 kwietnia 2023 w C i C++ przez polandonion Mądrala (7,040 p.)
Siemka ponownie. Mam zadanie, w którym trzeba znaleźć parę najbardziej oddalonych punktów. Wiem tyle, że punkty te zawsze leżeć będą na otoczce wypukłej. Mam już algorytm tworzący taką otoczkę w O(n*log(n)), ale nie wiem jak wydajnie znaleźć taką parę oprócz przeszukiwania wszystkich par w O(n^2).

Jakieś pomysły?

1 odpowiedź

+1 głos
odpowiedź 7 kwietnia 2023 przez Whistleroosh Maniak (56,980 p.)

Mój pierwszy pomysł był taki, żeby zrobić gąsienice. Dla p1 znajdujemy najbardziej oddalony punkt, powiedzmy q1. Potem bierzemy p2 (kolejny punkt z otoczki) i bierzemy kolejne punkty z otoczki na prawo od q1 (nazwijmy je q2) dopóki dist(p2, q2) będzie niemalejące. Ten algorytm ma małe problemy gdy otoczka przypomina owal.

Znalazłem natomiast algorytm Shamos, który działa na podobnej zasadzie. Idea jest taka, żeby toczyć tę otoczkę jak głaz. Kładziemy otoczke na odcinku (p_1, p_n) (gdzie n to liczba punktów na otoczce) i szukamy punktu, który znajduje się najwyżej. Potem przetaczamy otoczkę na odcinek (p2, p1) i znowu szukamy najwyższego punktu, przetaczamy na (p3, p2) itd.

W końcu któryś z punktów z odcinka na którym leżała otoczka i ten najwyższy punkt będą tworzyły parę najbardziej oddalonych punktów.

Pseudokod

Wizualizacja

komentarz 7 kwietnia 2023 przez polandonion Mądrala (7,040 p.)

dobra, ale jak znaleźć najwyższy punkt otoczki, gdy stoi ona np. bokiem, albo pod innym nachyleniem niż pierwotnie?

Podam przykład, mamy taki zestaw punktów wraz z otoczką:

No i tak jak powiedziałeś, przewracam na początku na bok o punktach p_1 oraz p_n mojej otoczki. Tyle, że jak mam wiedzieć, że w przypadku poniżej najwyżej stoi 4 oraz którą parę sprawdzać (mam na myśli aktualizację max odległości)? p_1 <-> p_4 czy może p_6 <-> p_4 ?

1
komentarz 7 kwietnia 2023 przez Whistleroosh Maniak (56,980 p.)
Jak spojrzysz na pseudokod to tam jest szukane największe pole trójkąta, w którym jeden odcinek to ten na którym leży otoczka. Wtedy oczywiście pole będzie największe, gdy punkt będzie najwyżej. Jeśli chodzi o to którą parę punktów sprawdzać to nie wiem. Zawsze można sprawdzić obydwie

Podobne pytania

0 głosów
1 odpowiedź 757 wizyt
+1 głos
0 odpowiedzi 70 wizyt
pytanie zadane 4 dni temu w Python przez natalia2002. Początkujący (400 p.)
+1 głos
1 odpowiedź 106 wizyt
pytanie zadane 29 marca w C i C++ przez Dani Obywatel (1,450 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...