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.


Log in to reply