Prodotto a catena di matrice booleana sparsa veloce


13

Quindi, ho circa 100-200 matrici booleane quadrate molto sparse con lunghezza laterale ~ diverse dozzine e ho bisogno di calcolare il loro prodotto. So che se li moltiplico in serie, il prodotto di solito rimarrà scarso ad ogni passaggio.

Esistono algoritmi di prodotti a catena di matrici che funzionano particolarmente velocemente in questo caso?

A un livello superiore, il problema è calcolare la composizione di una serie di mapping uno-a-molti su un grafico ragionevolmente piccolo (funzioni di transizione di un NFA), in cui la maggior parte degli elementi viene mappata a non più di 0-3.

(si noti che questo non è il solito problema del "prodotto a catena di matrici", perché tutte le matrici hanno le stesse dimensioni e non devo scegliere la parentesi ottimale)


5
in realtà, l'ordine in cui li moltiplichi potrebbe influenzare la scarsità dei risultati intermedi, quindi potrebbe essere ancora un problema importante in qualsiasi algoritmo così veloce.
— Joshua Grochow,

dalla tua altra domanda sembra che tu stia utilizzando operazioni AND / OR di semina 0/1 , non di addizione / moltiplicazione (come sembra indicare il problema), per favore chiariscilo nella domanda
— vzn,

Risposte:


10

Era troppo lungo per essere un commento: mi chiedo se quelle matrici abbiano una struttura che le fa comportare diversamente dalle matrici casuali. I prodotti di matrici sparse casuali vanno a zero o diventano rapidamente non sparse.

Ecco un semplice esperimento: prendi 200 matrici binarie casuali 50x50 e traccia il numero di non zeri in funzione del numero di matrici moltiplicato. I grafici di seguito mostrano una deviazione standard su 2000 corse. La prima trama è per il 2% di sparsità, la seconda trama è per il 3%


(fonte: yaroslavvb.com ) (fonte: yaroslavvb.com )

ci sono voluti 3 minuti sul mio laptop usando la moltiplicazione matrice standard

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.