Próbuję znaleźć podejście do następującego problemu:
Biorąc pod uwagę zestaw punktu i promień , znajdź punkt środkowy okręgu, tak aby okrąg zawierał maksymalną liczbę punktów ze zbioru. Czas działania powinien wynosić .SrO(n2)
Na początku wydawało się, że jest to coś podobnego do najmniejszego otaczającego problemu, które można łatwo rozwiązać w . Chodziło o to, aby ustawić dowolną centrum i otaczać cały punkt . Następnie, krok po kroku, zamień koło, aby dotknąć punktów w lewo / w prawo i zmniejsz koło do danego promienia, oczywiście to nie zadziała.O(n2)S
Nie wiem jak rozwiązać ten problem w czasie , ale istnieje algorytm .O(n2)O(n2logn)
Niech będzie okręgiem, którego środkiem jest , ty punkt, o promieniu . Nietrudno jest stwierdzić, że zestaw punktów może być zamknięty okręgiem o promieniu w punkcie przecięcia z C (p_0), C (p_1), \ ldots, C (p_m) nie jest puste. Co więcej, jeśli I (P) nie jest puste, muszą być pewne punkty w I (P) leżące na pewnym \ textbf {bd} C (p_i) (granica C (p_i) ). Tak więc dla każdego C (s_i) i każdego punktu p na jego wiązaniu próbujemy ustalić, ile kręgów zawieraC(si)siirP={p0,p1,…,pm}rI(P)C(p0),C(p1),…,C(pm)I(P)I(P)bdC(pi)C ( s i ) p pC(pi)C(si)pp . Maksymalna liczba spośród wszystkich p będzie odpowiedzią na ten problem.
Przeanalizujmy punkty w . Istnieje mapowanie jeden na jeden między punktami na a liczbą rzeczywistą w . Dla każdego okręgu przecięcie między i może być reprezentowane przez interwał . Tak więc dla wszystkich kręgów innych niż istnieje co najwyżej przedziałów (niektóre kręgi mogą nie przecinać się z ). Maksymalną liczbę można łatwo znaleźć, sortując wszystkie punkty końcowe interwału, skanując je w kolejności i licząc bieżącą nakładającą się liczbę. Dla każdegobd C ( s i ) [ 0 , 2 π ) C ( ( n - 1 ) C ( s i ) O ( n logbdC(si)bdC(si)[0,2π)C ( s j ) bd C ( s i ) [ b e g i n j , e n d j ] C ( s i ) n - 1 C ( s i ) 2C(sj)C(sj)bdC(si)[beginj,endj]C(si)n−1C(si)2(n−1)C(si) , ten krok można wykonać w czasie i jest takich kół, więc złożoność czasowa tego algorytmu wynosi .O(nlogn)nO(n2logn)
Układ kręgów można konstruować w czasie (z dużym prawdopodobieństwem) przy użyciu standardowego, losowego algorytmu przyrostowego. W rzeczywistości czas działania wynosi , gdzie jest liczbą par przecinających się okręgów. Zobacz swój ulubiony podręcznik geometrii obliczeniowej. O(n2)O(nlogn+k)k
JeffE
2
Myślę, że trudnymi pytaniami jest wiedza, czy wybrany przez ciebie krąg jest w rzeczywistości „maksymalny” w zestawie. Jedynym sposobem, w jaki mogę to ustalić, jest wypróbowanie wszystkich możliwych kombinacji punktów i przetestowanie rozmiaru okręgu, który je otacza.
Możesz jednak zmniejszyć przestrzeń wyszukiwania, dzieląc najpierw przestrzeń punktów na siatkę kwadratowych komórek o szerokości 2r. Następnie zlokalizuj komórkę o największej gęstości. Ponieważ już zlokalizowałeś jeden okrąg X punktów, możesz stwierdzić, że jeśli koło istnieje z większą liczbą punktów, to musi mieć co najmniej X punktów. I wykorzystaj to jako punkt wyjścia do testowania różnych kombinacji punktów.
Jeśli szukasz tylko zestawu punktów, który prawdopodobnie będzie maksymalny, możesz być w stanie jeszcze bardziej zmniejszyć liczbę kombinacji, które musisz przetestować, wybierając te punkty, które mieszczą się w sąsiedztwie komórek, w których gęstość sąsiedztwa jest większy niż X.
Powiedziawszy to, obie „redukcje” mogą się nie powieść, aw najgorszym przypadku będziesz obliczać koła dla wszystkich możliwych kombinacji punktów.
W Chazelle, B .; Lee, DT's Computing 36, 1-16 (1986), twierdzenie 3 na stronie 15, stwierdza, że maksymalny algorytm znajdowania otaczającego okręgu wymaga kosztu czasu .O(n2)
Myślę, że kluczem jest nadal algorytm konstrukcji wykresu przecięcia , o którym wspominał wcześniej (lub patrz Edelsbrunner, H. (1987), Algorytmy w geometrii kombinatorycznej, rozdział 7). Następnie znalezienie otaczającego okręgu maximun powinno być proste.O(n2)
Najwyraźniej problem ten jest równoznaczny ze znalezieniem punktu objętego maksymalną liczbą danych kręgów i łatwo jest wiedzieć, że tylko te w większości punktów przecięte przez dane n kół należy uznać za kandydatów. (Prowadzi to również bezpośrednio do algorytmu )2n2O(n2log(n))
Jednak dzięki zastosowaniu wyżej wspomnianego algorytmu konstrukcyjnego prowadzi on również algorytm dla tego problemu. Ponieważ wykres przecięcia zbudowany z wierzchołków jako punktów przecięcia i krawędzi jako łuków jest wykresem planarnym Eulera. Można więc po prostu podróżować wszystkimi łukami przez cykl Eulera i kolejność łuków indeksowanych przez indeksy okręgów, do których należy, oraz informację, czy jakikolwiek łuk jest „łukiem odchodzącym” (zakrzywionym do tyłu) lub „wejściem w łuk” ( zakrzywione do przodu) dla zarejestrowanego wierzchołka napotkanego podczas przemierzania łuku.O(n2)O(n2)
Według twierdzenia Jordana wierzchołek przecięcia jest otoczony okręgiem tylko wtedy, gdy napotyka najpierw „łuk odchodzący” należący do tego koła lub ma łuk padający należący do tego koła. Tak więc po całej podróży można łatwo znaleźć maksymalne otaczające koło. Podobnie jest w przypadku decydowania o czasach pokrycia dla punktów z uporządkowanymi przedziałami wzdłuż linii prostej (lub tj. Wersji 1D tego otaczającego problemu), z tym wyjątkiem, że kolejność została już wydana przez podróż. Podczas gdy według formuł Eulera dla wykresu płaskiego, całkowita liczba łuków jest liniowa z liczbą wierzchołków, a ponieważ nie trzeba ponownie rejestrować powiązanych informacji podczas podróży z powrotem do już odwiedzonych wierzchołków, przez uścisk dłoni lemat, całkowity koszt czasu wyniesie .V+E−F=2O(n2)
Jeśli należy to czytać jako uzupełnienie przyjętej odpowiedzi i nie należy jej czytać samodzielnie (czego nie wiem, ponieważ nie znam tego tematu), powinieneś o tym wyraźnie powiedzieć.
Myślę, że trudnymi pytaniami jest wiedza, czy wybrany przez ciebie krąg jest w rzeczywistości „maksymalny” w zestawie. Jedynym sposobem, w jaki mogę to ustalić, jest wypróbowanie wszystkich możliwych kombinacji punktów i przetestowanie rozmiaru okręgu, który je otacza.
Możesz jednak zmniejszyć przestrzeń wyszukiwania, dzieląc najpierw przestrzeń punktów na siatkę kwadratowych komórek o szerokości 2r. Następnie zlokalizuj komórkę o największej gęstości. Ponieważ już zlokalizowałeś jeden okrąg X punktów, możesz stwierdzić, że jeśli koło istnieje z większą liczbą punktów, to musi mieć co najmniej X punktów. I wykorzystaj to jako punkt wyjścia do testowania różnych kombinacji punktów.
Jeśli szukasz tylko zestawu punktów, który prawdopodobnie będzie maksymalny, możesz być w stanie jeszcze bardziej zmniejszyć liczbę kombinacji, które musisz przetestować, wybierając te punkty, które mieszczą się w sąsiedztwie komórek, w których gęstość sąsiedztwa jest większy niż X.
Powiedziawszy to, obie „redukcje” mogą się nie powieść, aw najgorszym przypadku będziesz obliczać koła dla wszystkich możliwych kombinacji punktów.
źródło
W Chazelle, B .; Lee, DT's Computing 36, 1-16 (1986), twierdzenie 3 na stronie 15, stwierdza, że maksymalny algorytm znajdowania otaczającego okręgu wymaga kosztu czasu .O(n2)
Myślę, że kluczem jest nadal algorytm konstrukcji wykresu przecięcia , o którym wspominał wcześniej (lub patrz Edelsbrunner, H. (1987), Algorytmy w geometrii kombinatorycznej, rozdział 7). Następnie znalezienie otaczającego okręgu maximun powinno być proste.O(n2)
Najwyraźniej problem ten jest równoznaczny ze znalezieniem punktu objętego maksymalną liczbą danych kręgów i łatwo jest wiedzieć, że tylko te w większości punktów przecięte przez dane n kół należy uznać za kandydatów. (Prowadzi to również bezpośrednio do algorytmu )2n2 O(n2log(n))
Jednak dzięki zastosowaniu wyżej wspomnianego algorytmu konstrukcyjnego prowadzi on również algorytm dla tego problemu. Ponieważ wykres przecięcia zbudowany z wierzchołków jako punktów przecięcia i krawędzi jako łuków jest wykresem planarnym Eulera. Można więc po prostu podróżować wszystkimi łukami przez cykl Eulera i kolejność łuków indeksowanych przez indeksy okręgów, do których należy, oraz informację, czy jakikolwiek łuk jest „łukiem odchodzącym” (zakrzywionym do tyłu) lub „wejściem w łuk” ( zakrzywione do przodu) dla zarejestrowanego wierzchołka napotkanego podczas przemierzania łuku.O(n2) O(n2)
Według twierdzenia Jordana wierzchołek przecięcia jest otoczony okręgiem tylko wtedy, gdy napotyka najpierw „łuk odchodzący” należący do tego koła lub ma łuk padający należący do tego koła. Tak więc po całej podróży można łatwo znaleźć maksymalne otaczające koło. Podobnie jest w przypadku decydowania o czasach pokrycia dla punktów z uporządkowanymi przedziałami wzdłuż linii prostej (lub tj. Wersji 1D tego otaczającego problemu), z tym wyjątkiem, że kolejność została już wydana przez podróż. Podczas gdy według formuł Eulera dla wykresu płaskiego, całkowita liczba łuków jest liniowa z liczbą wierzchołków, a ponieważ nie trzeba ponownie rejestrować powiązanych informacji podczas podróży z powrotem do już odwiedzonych wierzchołków, przez uścisk dłoni lemat, całkowity koszt czasu wyniesie .V+E−F=2 O(n2)
źródło