Быстро разреженный булев матричный продукт с возможной предварительной обработкой

12

Каковы наиболее практически эффективные алгоритмы умножения двух очень разреженных логических матриц (скажем, N = 200 и всего 100-200 ненулевых элементов)?

На самом деле, у меня есть преимущество в том, что когда я умножаю A на B, B заранее определены, и я могу выполнять произвольную сложную предварительную обработку на них. Я также знаю, что результаты продуктов всегда так же скудны, как и исходные матрицы.

«Довольно наивный» алгоритм (сканирование A по строкам; для каждого 1 бита A-строки, ИЛИ результата с соответствующей строкой B) оказывается очень эффективным и требует только нескольких тысяч инструкций ЦП для вычисления одного продукта. поэтому его будет непросто превзойти, и его можно превзойти только по постоянному коэффициенту (потому что в результате сотни битов). Но я не теряю надежды и прошу сообщество помочь :)

jkff
источник
1
Я сомневаюсь, что мы можем значительно превзойти константу в 10 машинных инструкций на слово вывода. Возможно ли, что какая-то неявная форма вывода будет приемлемой?
Уоррен Шуди
Да, до тех пор, пока его можно умножить на Bs.
jkff
На каких операциях сложения и умножения (для битов) определяется матричное умножение? Ваш наивный алгоритм предполагает, что ответ - «или» и «и» соответственно, но это довольно странное умножение матриц, поскольку они не определяют поле. Вы имеете в виду «xor» вместо «или»?
Уоррен Шуди
Нет, я имею в виду «или» и «и». Мне не нужны операции для определения поля, это на самом деле проблема, связанная с достижимостью графа (я вычисляю композицию нескольких функций «один ко многим»).
JKFF

Ответы:

11

Я не хотел на это отвечать, потому что единственный теоретический результат, о котором я знаю в этом духе, - это мое имя на бумаге ...

n×nAAn

(Примечание: этот алгоритм действительно полезен только для случая, когда одна матрица является плотной, а другая - разреженной. Этот случай часто встречается, хотя, например, при вычислении транзитивного замыкания разреженного графа матрица транзитивного замыкания в конечном итоге становится плотной по сравнению с исходной матрицей смежности.)

Бумага

Гай Э. Блеллох, Вирджиния Василевская, Райан Уильямс: новый комбинаторный подход для задач разреженных графов. ICALP (1) 2008: 108-120

ε>0O(n2+ε)n×nA

vtAvO(n(t/k+n/)/logn)k(k)nε=logcnk=ε(logn)/loglognnt/logn+n2/logcnc

AO(n1+ε)

Мы использовали эту структуру данных, чтобы дать более быстрые теоретические алгоритмы для APSP в разреженных невзвешенных графах.

Райан Уильямс
источник
3
Я только что заметил, что вы также предполагаете, что результат умножения матриц также невелик. В этом случае есть еще более быстрые алгоритмы; выполнить поиск в сети для «умножения матрицы с учетом вывода».
Райан Уильямс
{1,0,1}
5

Я думаю, что вы называете «гиперразделенной» матрицей (nnz <n). Несколько лет назад я написал статью о том, как их умножить. По сути, это соединение внешнего продукта с умным многофакторным объединением, чтобы исключить реализацию промежуточных троек.

Булук и Гилберт, IPDPS 2008: http://gauss.cs.ucsb.edu/publication/hypersparse-ipdps08.pdf

Айдын Булук
источник