Matrizen: Platz sparen mit Pointern.
-
Hallo Leute
ich habe folgende Matrix vor mir:
|a 0 0 b 0 0|
|0 a 0 0 b 0|
|0 0 a 0 0 b|jetzt möchte ich das ganze in drei Arrays möglichst sparsam abspreichern.
Normalerweise geht es ganz einfach:
werte = {a,a,a,b,b,b};
zeilen = {0,1,2};
spalten = {0,1,2,3,4,5};kann ich mir den platz in werte[] nicht irgendwie sparen da sowieso nur zwei werte vorkommen?
Die drei Arrays müssen in exakt der selben Form übergeben werden.
Hat jemand einen Tipp?
-
darkfate schrieb:
werte = {a,a,a,b,b,b};
zeilen = {0,1,2};
spalten = {0,1,2,3,4,5};
kann ich mir den platz in werte[] nicht irgendwie sparen da sowieso nur zwei werte vorkommen?du kannst die anderen arrays sparen:
werte = {a,a,a,b,b,b}; zeilen = 2; // bedeutet: 0...2 spalten = 5; // bedeutet: 0...5
-
Ja schon, erstmal ein Int- Array mit den Werten 0, a und b füllen. Dann ein Char- Array anlegen, das Du Bitpaarweise interpretierst, in ein char passen somit vier Wertigkeiten von Matrizenpunkten.
Also Deine erste Zeile wäre dann (% für Binär, x = don't care):1. Char: %01'00'00'02 == Index 1 0 0 2 == Arraywert a 0 0 b 2. Char: %00'00'xx'xx == Index 0 0 x x == Arraywert 0 0 x x
Alternativ kannst Du den Anfang der zweiten Zeile auch ins zweite Char ziehen, dann sähe das so aus:
2. Char: %00'00'00'01 == Index 0 0 0 1 == Arraywert 0 0 0 a
In der zweiten Variante sparst Du natürlich noch mehr Platz, schön wird das Adressieren der richtigen Bits in keinem Fall und besonders schnell natürlich auch nicht.