AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Welche Datenstruktur für Baum? (z.B. Octree, KD-tree)
Thema durchsuchen
Ansicht
Themen-Optionen

Welche Datenstruktur für Baum? (z.B. Octree, KD-tree)

Ein Thema von Sternkucker · begonnen am 31. Jan 2010 · letzter Beitrag vom 31. Jan 2010
Antwort Antwort
Sternkucker

Registriert seit: 6. Dez 2009
5 Beiträge
 
#1

Welche Datenstruktur für Baum? (z.B. Octree, KD-tree)

  Alt 31. Jan 2010, 19:24
Liebe Forenmitglieder,

Ich habe eine 3D-Punktwolke mit > 100.000 Teilchen und möchte im Rahmen einer Simulation die jeweiligen Nachbarn finden. Ich habe zunächst eine einfache Schleife genommen, und für alle anderen Teilchen den Abstand berechnet. Das klappt, ist aber zu langsam. Dann habe ich mir einen Cache gebaut, der in einer Datei gesichert wird - das macht's aber nur mäßig schneller, da im Laufe der Simulation einzelne Teilchen wegfallen und der Cache dann immer weniger Trefferquote hat.

Nun habe ich gelesen, dass Baumverfahren die Suche massiv beschleunigen können - insbesondere K-D-Baum und Octree. Ich habe mir einige Texte zu KD-Bäumen durchgelesen und glaube, das Verfahren im Wesentlichen verstanden zu haben. Auch habe ich eine C++ Implementation gefunden - die verstehe ich aber nichtmal im Ansatz, wohl weil ich keinerlei Ahnung von C++ habe.

Ich möchte also so einen K-D-Baum in Delphi implementieren. Könnt ihr mir helfen, welche Datenstruktur sich dafür empfiehlt? Da stehe ich irgendwie auf dem Schlauch. Ich habe z.B. meine 3D-Datenwerte in einem array of record gespeichert, den ich mit Setlength anpasse:

Delphi-Quellcode:
star : array of record
         x : Single;
         y : Single;
         z : Single;
         s : Integer; // Status des Punktes
So ein Baum wächst aber in alle Richtungen - in die Tiefe, und in die Breite. Mit welchem Datentyp könnte ich das abbilden? Ich habe zuerst an ein mehrdimensionales array[0..10,0..10,0..10,...] gedacht, aber man kennt im Vorhinein weder Tiefe noch Breite. Außerdem kann man sich nicht vorstellen, wo oben und unten ist, wo links und rechts Werte eingefügt bzw. gesucht werden müssen.

Ich bin vertraut mit den einfachen Datentypen aus Delphi - also records, arrays, integers, floats etc. Ich kenne Schleifen, Klassen, Units, Funktionen und Prozeduren und kann damit recht sicher umgehen. Ich habe aber z.B. noch nie etwas mit Pointern gemacht. Das nur zur Info, damit ihr meine Kenntnisse ungefähr einschätzen könnt.

Wer kann mir einen Tip geben zur Umsetzung? Danke an alle!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Welche Datenstruktur für Baum? (z.B. Octree, KD-tree)

  Alt 31. Jan 2010, 19:32
Dynamische Strukturen würde ich dynamisch verwalten, also nicht mit Arrays.
Für einen 3D-Raum sollte ein Octree reichen.
http://wiki.delphigl.com/index.php/Tutorial_Octree
Markus Kinzler
  Mit Zitat antworten Zitat
Sternkucker

Registriert seit: 6. Dez 2009
5 Beiträge
 
#3

Re: Welche Datenstruktur für Baum? (z.B. Octree, KD-tree)

  Alt 31. Jan 2010, 20:41
Cooles Tutorial. Das Programmier-Level ist halt ziemlich hoch und deutlich über meinem angesiedelt.
Kannst du mir einen Lesetip für das erwähnte "dynamische" geben? Hat das mit Pointern zu tun?

Beim Lesen des Octree ist mir aufgefallen: Im Grunde wird doch dabei der Raum in Würfel eingeteilt. Sagen wir, 10x10x10 = 1000 Würfel als Unterteilung des Gesamtraumes.
  • Nun könnte ich doch eine Liste erstellen: Würfel 1 enthält Punkte 1, 2, 3,...
  • Noch eine Liste: Würfel 1 grenzt an Würfel 2, 3, ... (gesamt 26)
  • Man durchsuche den Ausgangswürfel und die umliegenden nach dem nächstliegenden Punkt, und weite die Suche aus falls nötig
So muss man zur Laufzeit im Idealfall nur 26 + 1 von gesamt 1000 Würfeln durchsuchen, das wäre ein Speedup von 37. Die Berechnungen, die zum Aufbau der Struktur anfallen, können im Vorfeld ablaufen, dafür steht genügend Zeit zur Verfügung.

Ist das Verfahren brauchbar? Wieviel schlechter ist es als ein Octree? Das könnte ich mit meinen Fähigkeiten wahrscheinlich gut umsetzen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz