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.