Schnelle und platzsparende Datenstruktur für nächste Nachbarn in 3 Dimensionen?


7

Ich suche nach Datenstrukturen, um Anfragen von nächsten Nachbarn in 3D zu beantworten, die einigermaßen platzsparend sind (dh höchstens verwendet werden) Ö(n1+ϵ) Raum) und schnell (Ö(nϵ) oder Ö(lÖGk(n)) Abfragezeit im schlimmsten Fall).

Als Zusammenfassung dessen, was ich bereits weiß:

  • 1D ist trivial (sortieren Sie einfach die Punkte und verwenden Sie die binäre Suche).

  • 2D ist etwas kniffliger, aber mit einer Punktstandortdatenstruktur + Voronoi-Diagramm können Sie dies tun Ö(n) Raum und Ö(lÖG(n)) Abfragezeit.

  • In 3D und höher bricht diese Lösung zusammen, da das Voronoi-Diagramm einer Menge von Punkten ist Ö(nflÖÖr(d/.2)).

Ich kenne ungefähre Techniken, die auf kd-Bäumen oder gitterbasierten Methoden basieren, obwohl diese von der Annahme einer gleichmäßigen Verteilung der Punkte oder etwas über die Entfernung zum nächsten Nachbarn abhängen und nicht in allen Fällen so gut funktionieren. Ich bin nicht an diesen zufälligen oder ungefähren Lösungen interessiert - ich möchte etwas, das im schlimmsten Fall für jeden Datensatz funktioniert. Gibt es irgendetwas da draußen, das dies tut, oder gibt es eine Untergrenze, die diese Idee aus dem Wasser bläst?

Antworten:


1

Ich mag Drosts hierarchisches Voxel-Hashing . Es hat eine durchschnittliche zeitliche Komplexität vonÖ(lÖG(lÖG(|D.|))), wo |D.|ist die Anzahl der Punkte in der Datenwolke. Während die Konstruktion etwas langwieriger ist, wird die Suche viel schneller.

Die Methode wird auch auf eine Journalversion erweitert, die Sie unter diesem Link finden .


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.