Quais são os algoritmos mais eficientes para multiplicar duas matrizes booleanas muito esparsas (por exemplo, N = 200 e existem apenas 100-200 elementos diferentes de zero)?
Na verdade, tenho a vantagem de que quando estou multiplicando A por B, os B são predefinidos e posso executar um pré-processamento arbitrariamente complexo neles. Sei também que os resultados dos produtos são sempre tão esparsos quanto as matrizes originais.
O algoritmo "bastante ingênuo" (varre A por linhas; para cada 1 bit da linha A, ou o resultado com a linha correspondente de B) resulta muito eficiente e requer apenas algumas milhares de instruções da CPU para calcular um único produto , portanto, não será fácil superá-lo e só poderá ser superado por um fator constante (porque há centenas de um bit no resultado). Mas não estou perdendo a esperança e pedindo ajuda à comunidade :)
Respostas:
Eu relutava em responder a isso, porque o único resultado teórico que conheço nesse sentido tem meu nome no papel ...
(Nota: esse algoritmo é realmente realmente útil para o caso em que uma matriz é densa e a outra é esparsa. Esse caso ocorre muito, por exemplo, ao calcular o fechamento transitivo de um gráfico esparso, a matriz de fechamento transitivo ficará densa. comparado à matriz de adjacência original.)
O papel é
- Para qualquer vetor com apenas zero, pode ser calculado em , em que , são parâmetros livres que satisfazem . (Uma configuração legal é e , de modo que o tempo de execução seja aproximadamente para qualquer constante desejada .t A v O ( n ( t / k + n / ℓ ) / log n ) ℓ kv t Av O(n(t/k+n/ℓ)/logn) ℓ k (ℓk)≤nε ℓ=logcn k=ε(logn)/loglogn nt/logn+n2/logcn c
- As atualizações de linha e coluna em podem ser calculadas em .A O(n1+ε)
Usamos essa estrutura de dados para fornecer algoritmos teóricos mais rápidos para o APSP em gráficos esparsos não ponderados.
fonte
Eu acho que o que você chama de matriz "hiperespacial" (nnz <n). Alguns anos atrás, escrevi um artigo sobre como multiplicá-los. Essencialmente, é uma junção de produto externo com uma fusão inteligente de várias vias para eliminar a realização de triplos intermediários.
Buluc e Gilbert, IPDPS 2008: http://gauss.cs.ucsb.edu/publication/hypersparse-ipdps08.pdf
fonte