Wie würden Sie eine binäre Matrix transponieren?

Ich habe binäre Matrizen in C ++, die ich mit einem Vektor von 8-Bit-Werten darstelle.

Zum Beispiel die folgende Matrix:

1 0 1 0 1 0 1
0 1 1 0 0 1 1
0 0 0 1 1 1 1

wird dargestellt als:

const uint8_t matrix[] = {
    0b01010101,
    0b00110011,
    0b00001111,
};

Der Grund, warum ich das so mache, ist, dass das Berechnen des Produkts einer solchen Matrix und eines 8-Bit-Vektors dann wirklich einfach und effizient wird (nur ein bitweises UND und eine Paritätsberechnung pro Zeile), was viel besser ist als jedes Bit einzeln zu berechnen.

Ich suche jetzt nach einem effizienten Weg, um eine solche Matrix zu transponieren, aber ich konnte nicht herausfinden, wie es geht, ohne jedes Bit manuell berechnen zu müssen.

Um das obige Beispiel zu verdeutlichen, möchte ich das folgende Ergebnis aus der Umsetzung erhalten:

const uint8_t transposed[] = {
    0b00000000,
    0b00000100,
    0b00000010,
    0b00000110,
    0b00000001,
    0b00000101,
    0b00000011,
    0b00000111,
};

HINWEI: Ich würde einen Algorithmus bevorzugen, der dies mit beliebig großen Matrizen berechnen kann, bin aber auch an Algorithmen interessiert, die nur bestimmte Größen verarbeiten können.

Antworten auf die Frage(14)

Ihre Antwort auf die Frage