Also verwende ich boolesche Matrizen, deren Dimension in der Regel ein paar Dutzend bis ein paar hundert ist, sie sind normalerweise ziemlich spärlich (nur 2-4 Nicht-Nullen in den meisten Zeilen und Spalten) und meine Laufzeit wird stark von deren dominiert Multiplikation.Was ist der schnellste Weg, um spärliche boolesche Matrizen darzustellen und zu multiplizieren?
Welche Datenstruktur eignet sich am besten für die Beschleunigung der Multiplikation unter diesen Umständen?
Momentan speichere ich jede Matrix in einem zusammenhängenden Bitset (Array von 64-Bit-Longs) zeilenweise und multipliziere sie mit im Grunde dem Standardalgorithmus, beschleunigte nur mit dem schnellen Vorgang der Lokalisierung des nächsten Satzes Bit in einem Wort und mit Vektorisierung durch Bitmask-Operationen.
Sollte ich vielleicht tatsächlich eine spärliche Darstellung verwenden?
Was meinst du mit "Dimension ist in der Regel ein paar Dutzend bis ein paar hundert"? Das klingt mehr wie eine Anzahl von Elementen (oder die Länge einer Dimension) als die Dimension (d. H. Die Anzahl der Koordinaten, die Sie angeben müssen, um ein Element auszuwählen). –