Środowisko uruchomieniowe optymalnego algorytmu chciwości

16

|P|=nkknC={c1,c2,,ck}kDcost(C)=maximinjD(pi,cj)Doznacza odległość euklidesową między punktem wejściowym a punktem środkowym . Każdy punkt przypisuje się do najbliższego centrum gromady grupującego wierzchołki w różnych skupisk.c j kpicjk

Problem znany jest jako (dyskretny) problem klastrowania i jest to -hard. Można to pokazać z redukcją problemu kompletnego dominującego problemu, że jeśli istnieje algorytm aproksymacji dla problemu z to .NP NP ρ ρ < 2 P = NPkNPNPρρ<2P=NP

Optymalny algorytm aproksymacji jest bardzo prosty i intuicyjny. Najpierw wybiera arbitralnie punkt i umieszcza go w zbiorze centrów skupień. Następnie wybiera się kolejne centrum klastrów, które jest możliwie jak najdalej od wszystkich pozostałych centrów klastrów. Więc póki , my wielokrotnie znaleźć punkt , dla których odległość D (j, C) jest zmaksymalizowane i dodać go do C . Raz | C | = k skończone.p P C | C | < k j P D ( j , C ) C | C | = k2pPC|C|<kjPD(j,C)C|C|=k

Nietrudno zauważyć, że optymalny algorytm zachłanny działa w czasie O(nk) . Rodzi to pytanie: czy możemy osiągnąć czas o(nk) ? O ile lepiej możemy zrobić?

Juho
źródło

Odpowiedzi:

7

Problem można rzeczywiście rozpatrywać geometrycznie w taki sposób, że chcielibyśmy objąć punkty kulkami, w których promień największej kuli jest zminimalizowany.Vk

O(nk) jest rzeczywiście dość proste do osiągnięcia, ale można zrobić lepiej. Feder i Greene, Optymalne algorytmy przybliżonego grupowania, 1988 osiągają czas działania przy użyciu bardziej sprytnych struktur danych i dalej pokazują, że jest to optymalne w algebraicznym modelu drzewa decyzyjnego.Θ(nlogk)

Juho
źródło
1

Moje pytanie: Czy istnieje sposób, aby uruchomić chciwą strategię kompletacji w czasie ?o(|V|2)

Wydaje mi się, że to opisałeś. W przypadku, gdy przeczytałem zbyt daleko w twoim opisie, oto co zrozumiałem. Posiada strukturę danych asocjacyjny przypisujące każdy element przy czym suma odległości od elementów S . Ta struktura danych może być inicjowana kosztem O ( | V | ) z odległością do p, a ta inicjalizacja może wytworzyć następny element jako efekt uboczny bez zwiększania złożoności. Można go zaktualizować po wybraniu nowego elementu kosztem O ( | V | ) , ponownie wytwarzając kolejny element jako efekt uboczny. Powtórz, aby uzyskać SVSO(|V|)pO(|V|)S. Wynikająca z tego złożoność to .O(k|V|)

AProgrammer
źródło
1
Ale zwróć uwagę na ograniczenie : w najgorszym przypadku może być tak duże jak | V | . Podejrzewam, że istnieją struktury danych, które osiągają jeszcze lepsze granice, ale tak naprawdę nie wiem. k|V|
Juho
Ups, a nie O w twoim pytaniu. (Zauważ, że w swoim pytaniu wróciłeś do k 3 , więc powinno to być ulepszenie). To, co proponuję, nie wykorzystuje faktu, że pracujesz w przestrzeni euklidesowej, myślę, że będziesz musiał go użyć, aby zrobić lepiej, ale obecnie nie wiem, jak to zrobić. oOk3
AProgrammer