AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Speicherstruktur - Bräucht ein paar Vorschläge
Thema durchsuchen
Ansicht
Themen-Optionen

Speicherstruktur - Bräucht ein paar Vorschläge

Ein Thema von Jelly · begonnen am 14. Sep 2004 · letzter Beitrag vom 15. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#1

Speicherstruktur - Bräucht ein paar Vorschläge

  Alt 14. Sep 2004, 15:36
Hallo,

ich muss in einem Projekt Daten speichern, und zwar jede Menge und sehr schnell. Im Prinzip handelt es sich um ein dreidimensionales Gitternetz, wo ich in jedem Gitterpunkt mindestens einen, später sogar 2 Double-Werte speichern muss. Das Gitter hat mindestens eine Dimension 150x150x150 Punkte... Wer jetzt bischen rechnen kann, kommt somit schnell auf einen Speicherbedarf von:
150x150x150x2x8 = 54 MB, und das ist zuviel... Es ist aber auch Tatsache, daß nicht alle 150x150x150 Gitterpunkte benötigt werden, sondern je nach Berechnung fallen da sicherlich gut 90% weg. Ich weiss aber nicht im voraus, welche Punkte das sind, da es sich um eine Monte Carlo Simulation handelt...

Jetzt ist meine Frage, wie würdet ihr solche Datenmengen gescheit irgendwie speichern. Ich denk mal, ein 3-dimensionales Array fällt da raus, aber wie sonst... Nochmals betont, das Speichern muss schnell gehen. Von daher fällt eine Datenbank sowieso schon mal weg. Aber irgendwelche komplizierten Algorythmen, wie ich jetzt mein Gitterpunkt einer Speichereinheit zuordne, in dem Sinne auch... Ich wollt deshalb hier mal fragen, bevor ich da irgendwie selbst rumprobiere, und dabei aber nichts Gescheites bei rausbekomme.

Danke schon mal,
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Speicherstruktur - Bräucht ein paar Vorschläge

  Alt 14. Sep 2004, 15:38
Delphi-Quellcode:
T3DArray = array of record
  X, Y, Z: Double;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Speicherstruktur - Bräucht ein paar Vorschläge

  Alt 14. Sep 2004, 15:55
Und das Array kriegt dann wieder die Größe 150x150x150, oder? Doch genau das will ich ja vermeiden.
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#4

Re: Speicherstruktur - Bräucht ein paar Vorschläge

  Alt 14. Sep 2004, 15:58
Nein, mach es am besten wie die 3D-Programme es machen: Speichere nur die Koordinaten X, Y und Z, an denen ein Gitterpunkt existiert. Die Verbindung der einzelnen Punkte (falls nötig) ergibt sich aus der Reihenfolge der Speicherung.
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#5

Re: Speicherstruktur - Bräucht ein paar Vorschläge

  Alt 14. Sep 2004, 16:01
was heisst denn das 90% der punkte nicht benötigt werden?
kann man das prüfen?

dann könnte man sagen

Delphi-Quellcode:
for x:=1 to 150 do
  for y:=1 to 150 do
    for z:=1 to 150 do
      if benoetigt(x,y,z)
      then begin
           if leer<>0
           then begin
                SaveFile.Add('#'+inttostr(leer));
                leer:=0;
                end;
           SaveFile.Add(floattostring(werte[x,y,z]));
           end;
      else leer:=leer+1;
es werden also die werte, und die leeren punkte dazwischen gespeichert...
du musst dann beim auslesen so in etwa sagen, wenn am anfang ein # dann um soundsoviele punkte weiter, isn bisserl knobelei....
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Speicherstruktur - Bräucht ein paar Vorschläge

  Alt 14. Sep 2004, 17:49
Das mit den 90% kann man so natürlich pauschal nicht sagen. Es handelt sich um eine Monte Carlo Simulation, wo 100.000.000 Vorgänge simuliert werden, und in jedem Vorgang können jeweils lokal an einem Gitterpunkt Werte (in meinem Fall Enregien) gespeichert werden... Das passiert aber selbst bei 100.000.000 Vorgängen nicht an jedem Punkt, an anderen Punkten vielleicht etliche Millionen Male. Diese Punkte, wo erst mal nix passiert, für die will ich vermeiden, daß ich im Vorfeld bereits Speicher reserviere... Das wäre aber bei einem 150x150x150 gleich für jeden Punkt der Fall.

Ich meine 50MB gehen ja noch zur Not. Mein Ziel ist es aber ein wesentlich feineres Gitter zu konzipieren (1000x1000x1000 z.B.)... Das sprengt aber dann selbst den Speicher bei 1 GB RAM.
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#7

Re: Speicherstruktur - Bräucht ein paar Vorschläge

  Alt 14. Sep 2004, 17:55
leider is mir "Monte-Carlo-Simulation" kein begriff

kannst du mit meinem vorscvhlag von oben was anfangen?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#8

Re: Speicherstruktur - Bräucht ein paar Vorschläge

  Alt 14. Sep 2004, 18:03
Delphi-Quellcode:
type
  T3DPoint = record
    X, Y, Z: Double;
    Value1, Value2 : Double;
  end;
  T3DArray = array of T3DPoint;

var
  3DArray : T3DArray;
Einen neuen Punkt mit Werten legst du dann so an:
Delphi-Quellcode:
begin
  SetLength(3DArray, length(3DArray)+1);
  with 3DArray[length(3DArray)-1] do
  begin
    X := 123.456;
    // usw.
  end;
end;
Problem ist dann nur, wenn der Wert eines in der Array vorhandenen Punktes geändert werden soll, musst du den Array von 0 bis length(3DArray)-1 durchsuchen, um ihn wiederzufinden.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Speicherstruktur - Bräucht ein paar Vorschläge

  Alt 14. Sep 2004, 18:55
Du könntest ein Gitter auch realisieren, indem du eine verkettete Struktur aufbaust. Dabei enthält jeder Gitterknoten Referenzen auf seine Nachbarn. So wie bei einer Liste, nur nicht eindimensional, sondern dreidimensional!
Ist nur ein Gedanke, hab sowas noch nie gemacht, aber ich denke, es wäre eine Überlegung wärt. Versuch dir vielleicht zunächst mal vorzustellen, wie sowas in 2D aussehen würde, und es dann auf eine 3dimensionale Darstellung zu übertragen. Es wäre eine recht speichersparende Organisation, da die Verteilung im Raum keine Rolle spielt.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Speicherstruktur - Bräucht ein paar Vorschläge

  Alt 15. Sep 2004, 17:28
Hallo,
ich denk die Sache mit array of TRecord kann ich nicht nutzen, da, wie schon geschrieben, ich dann eventuell das ganze Array durchlaufen muss, umd festzustellen ob es schon den Punkt gibt.

Monte Carlo Simulation ist ein Zufallsverfahren, um nicht berechenbare Phänomene wenigestens näherungsweise zu berechnen...

Ich habs im Moment so:
Delphi-Quellcode:
type
 TEnergie = record
   Absorb1, Absorb : double ;
 end ;

var
 Energie : array of array of array of TEnergie ;
Ein 3-dimensionales dynamisches Array. Aber das ist nicht das was ich brauche.
@glkbkk: dein Vorschlag kann eventuell ein Ansatz sein, da ich in der Tat zur Laufzeit meine Punkte nicht suchen muss. Somit kann ich bei jeder Speicherung angeben, um welchen Gitterpunkt es sich handelt. Aber irgendwie hab ich dann anschliessend wieder das Problem, diese Liste zu lesen, und um doppelte Einträge aufzufinden.

Verkettete Listen ist eventuell auch noch ein Gedanke wert...

Danke schon mal für die Vorschläge.

Gruß
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:00 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