Thread Hash mit Arrays zu langsam - wie sortieren und suchen? (38 answers)
Opened by Gast at 2009-01-28 14:02

LanX-
 2009-01-29 02:15
#118459 #118459
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Ich weiß nicht was du unter einer "Mapping-Tabelle" verstehst...

wenn dein Problem lautet: Wie kann ich die 4D-Koordinaten so sortieren, dass ich zu einem beliebigen Punkt den euklidisch nächsten Punkt möglischt schnell finden kann, hätte ich nen naiven Vorschlag:

Lege zu jeder Dimension danach sortierte Arrays A1,A2,A3 und A4 an und untersuche nur die jeweils in der Dimension nächsten Punkte. Der jeweils geringste gefundeen Abstand gibt dir dann ein Abbruchkriterium, gewisserweise einen schrumpfenden Suchradius.

In deinem Beispiel würdest du zuerst [5,5,5,5] in A1 und [1,1,1,1] in A2,A3,A4 untersuchen.
der minimal gefundene Abstand wäre dann 4. D.h. man braucht nur noch Punkte mit x1 in 1 bis 9 und x2,x3,x4 in -3 bis 5 zu untersuchen.
Dann untersuchst du die nächsten Punkt in A1-A4, also [4,4,4,4] und [2,2,2,2], dabei letzteres mit minimalem Abstand, d.h Suchradius schrumpft auf 3.5,

Der Radius pro Achse ist sogar noch kleiner, weil du weist ja jetzt dass ein minimales Ergebnis in den Achsen 2, 3 und 4 mindestens einen Abstand von 1 hat, weil [2,2,2,2] einen kleineren Abstand als alle vorherigen Punkte in diesen Achsen hatte.

D.H der Suchradius in Achse 1 schrumpft auf sqrt(12-1²-1²-1²)=3

Gerade das letzte Argument mit dem Mindestabstand sollte helfen den Suchradius schnell schrumpfen zu lassen, sodass die Suche auch schnell beendet wird.

Das ist bestimmt nicht so effizient wie R-Trees wird aber leichter zu proggen sein und keine 14 Tage brauchen.

Also ich merk gerade das man das mathematisch sauberer hinschreiben könnte, aber ich hoffe die Idee wird klar ohen dass ich den kompletten Code hinschreiben muss.

Natürlich müsstest du die Arrays A1-A4 auch bzgl der anderen Achsen sortieren, lexikografisch gewissermaßen.

View full thread Hash mit Arrays zu langsam - wie sortieren und suchen?