Hvis du leder efter en tilnærmelsesalgoritme, foreslår jeg, at du kigger efter en k-betydningsalgoritme eller en hierarkisk klynge, især en monsterkurve eller en rumudfyldningskurve. Først og fremmest kan du beregne et minimalt spændingstræ i grafen og derefter fjerne de længste og dyreste kanter. Så laver træet mange små træer, og du kan bruge k-midlerne til at beregne gruppe af punkter, dvs. klynger.
"Single-link k-clustering algoritmen ... er netop Kruskals algoritme ... svarende til at finde en MST og slette de k-1 dyreste kanter." Se for eksempel her:https://stats.stackexchange.com/ question/1475/visualization-software-for-clustering .
Et godt eksempel på en monsterkurve er hilbertkurven. Grundformen for denne kurve er en U-form, og ved at kopiere mange af den sammen og dreje den udfylder kurven det euklidiske rum. Overraskende nok kan en grå kode hjælpe med at finde ud af orienteringen af denne U-form. Du kan slå Nicks rumlige indeks quadtree hilbert-kurve op blogartikel om flere detaljer . I stedet for at beregne kurvens indeks kan du sammensætte en quadkey som i bing maps. Quadkey er unik for hver koordinat, og den kan bruges med normale strengoperationer. Hver position i nøglen er en del af den U-formede kurve, og du kan således vælge dette område af punkter fra at vælge delvist fra venstre mod højre fra quadkey'en.
På dette billede kan du se den grønne polygon findes ved hjælp af en hilbertkurve:
Du kan finde mine php-klasser her:http://www.phpclasses.org/package/6202-PHP-Generate-points-of-an-Hilbert-curve.html