Chciałbym sprawdzić, czy zestaw punktów N opisać wypukłego wielokąta lub nieAlgorytm do znalezienia, jeśli zbiór wypukły punkt opisuje enveloppe
Zastanawiałem się, czy nie jest to dobry algorytm do tego?
Oto niektóre podejścia myślałem:
algorytm1.Convex Otoczka:
Jeśli zestaw jest równa jego wypukłej wtedy jest wypukła. Złożoność takiego algorytmu to O (n * LN (N)). Ale miałem przeczucie, że to jak rozbicie motyla na kole.
3.Looking w kątami
Następnie, że na sprawdzenie czy kąty 2 kolejne wektory nie przekracza 180 ° C. Ale ponieważ moje punkty nie są zamówione, muszę sprawdzić wszystkie kombinacje 3 kolejnych punktów i to sprawia, że jest to złożoność O (n3). (Powinien być sposób, aby to zrobić lepiej)
Próbuję wybrać punkty od prawej do lewej, na przykład, ale wyniki nie zawsze są jednym z oczekiwaniami:
na przykład w tym przypadku uważam kształt wypukły, jeśli biorę od lewej do prawej:
Więc dla tego rozwiązanie Być może potrzebuję dobrego algorytmu do wyboru punktów.
3. patrząc środka ciężkości:
myślę, że sprawdzenie, czy środek symetrii wszystkich 3 consecutives punkt znajduje się wewnątrz kształtu powie mi, czy kształt jest wypukła o nie.
Oto co mam na myśli (G jest środek symetrii każdego trójkąta):
dla tego rozwiązania można wybrać punkty od lewej do prawej bez problemów. jeśli złożoność sprawdzania, czy G ma kształt O (N), wówczas ogólna złożoność byłaby trochę jak O (N2).
Czy możesz mi doradzić na dobry algorytm, aby rozwiązać ten problem lub poprawić rozwiązania Myślę
Dzięki z góry
Szybka sugestia dla metody 1: Zamiast właściwie budować wypukły kadłub, wystarczy uruchomić algorytm i zakończyć jak najszybciej/jeśli odrzuci jakiekolwiek punkty. – user786653
Spojrzę na to. Thanks –
Nieodebrane okno edycji mojego komentarza. "algorytm" = [Grahams Scan] (http://en.wikipedia.org/wiki/Graham_scan) (Dokładnie to, co sugeruje twoja metoda 2). Ponadto, wiem, że to nie poprawi asymptotycznego czasu działania, ale sprawia, że problem jest bardzo łatwy do zrównoleglania. – user786653