Jeśli szukasz algorytmu aproksymacyjnego, proponuję poszukać algorytmu k-średnich lub klastra hierarchicznego, zwłaszcza krzywej potwora lub krzywej wypełniania przestrzeni. Po pierwsze, możesz obliczyć minimalne drzewo opinające grafu, a następnie usunąć najdłuższe i najdroższe krawędzie. Następnie drzewo tworzy wiele małych drzewek i można użyć k-średnich do obliczenia grupy punktów, tj. skupień.
„Algorytm jednoogniwowego klastrowania k… jest dokładnie algorytmem Kruskala… równoważnym znalezieniu MST i usunięciu najdroższych krawędzi k-1”. Zobacz na przykład tutaj:https://stats.stackexchange.com/ pytania/1475/oprogramowanie-wizualizacyjne-do-klastrowania .
Dobrym przykładem krzywej potwora jest krzywa Hilberta. Podstawową formą tej krzywej jest kształt litery U i kopiując wiele z nich razem i obracając, krzywa wypełnia przestrzeń euklidyjską. Co zaskakujące, szary kod może pomóc w ustaleniu orientacji tego kształtu litery U. Możesz sprawdzić krzywą poczwórnego indeksu przestrzennego Nicka Hilberta artykuł na blogu zawierający więcej szczegółów . Zamiast tego, aby obliczyć indeks krzywej, możesz złożyć quadkey, jak w mapach Bing. Quadkey jest unikalny dla każdej współrzędnej i może być używany w normalnych operacjach na ciągach. Każda pozycja w klawiszu jest częścią krzywej w kształcie litery U, a zatem możesz wybrać ten obszar punktów z zaznaczenia częściowo od lewej do prawej z quadkey.
Na tym obrazku widać zielony wielokąt znaleziony za pomocą krzywej Hilberta:
Możesz znaleźć moje klasy php tutaj:http://www.phpclasses.org/package/6202-PHP-Generuj-punkty-krzywej-Hilberta.html