Designfrage für große Mehrdimensionale Matrizen
-
Hallo,
Ich wurde letzte Woche vor ein Problem gestellt was ich mit meiner geringen Programmier-Erfahrung irgendwie nicht recht lösen/bewerten kann.
Die genaue Funktion ist unwichtig. Lediglich die Organisation der Daten erweist sich als kompliziert. Für jede Objekt-Konstellation (Obj_m, Obj_l) muss eine Berechnung über eine eigene Matrix [i,j,r] vorgenommen werden. Diese Resultate müssen leider alle als Klassenattribut gespeichert werden. Also eine 5-dim-Matrix [m,l,i,j,r]. Bis hier hin ist nichts zu ändern.(Var 1)
Nun kann ich ein 5-dim Array verwenden. Da ich aber über 20.000.000 - unsigned int - Einträge in der (Gesamt-)Matrix habe, müsste es doch zu einem Stack-Overflow kommen. (Oder?) Außerdem ist mir der 5-d Array nach Funktionsübergaben immer in einen 1-d Array zerfallen. (Ich weiß hier leider nicht genau warum, bzw. wie eine alternative hier für wäre. Hier ist wichtig zu erwähnen, dass die Arraygrenzen variabel sind und ich ihn deshalb mit einer Referenz übergeben musste)(Var 2)
Ich nehme Vectoren. Hier kann ich alles super abspeichern und jede Funktionsübergabe läuft super. Aber die hohe Dimensionsanzahl verursacht bei der Verschachtelung von Vectoren eine enorme Verzögerung der Laufzeit.Leider kenne ich keine weitere Alternative wie ich diese enorme Menge an Daten verarbeiten/representieren kann. Und weiter weiß ich auch nicht welche Alternative besser geeignet ist. Implementiert habe ich beide. Kennt sich hier jemand mit Problemen dieser Art aus und kann mir eine Idee geben.
vielen Dank,
mfg ComputerCarl
-
Var 3: Benutze eine fertige Klasse fuer Matrizen.
Var 4: Implementiere eine eigene Matrixklasse. Als Container std::vector<unsigned int> . Implementiere operator()(i, j, k, l, m, ... ), um den mehrdimensionalen Zugriff auf den eindimensionalen std::vector abzubilden.
-
Klingt super danke schön.
Variante 4 werde ich nächste Woche gleich mal versuchen umzusetzten.
Allerdings würde mich die Empfehlung der fertigen Klassen etwas mehr reizen.
Welche besonders "guten" Klassen gibt es denn vorimplementiert?danke mfg und schönen Männertag morgen
Computer Carl