可进行预处理的快速稀疏布尔矩阵乘积


12

将两个非常稀疏的布尔矩阵相乘的最实用的算法是什么(例如,N = 200,并且只有大约100-200个非零元素)?

实际上,我的优势在于,当我将A乘以B时,B是预定义的,并且我可以对它们进行任意复杂的预处理。我也知道乘积的结果总是和原始矩阵一样稀疏。

事实证明,“天真”算法(逐行扫描A;对于A行的每1位,或与B对应行的结果进行扫描)非常高效,仅需几千条CPU指令即可计算单个产品,所以要想超越它并不容易,并且只能以一个恒定的因子被超越(因为结果中有数百个一位)。但是我没有失去希望,并向社区寻求帮助:)


1
我怀疑我们能否在每个输出字中击败10个常量的机器指令。输出的某种隐式形式是否可以接受?
沃伦·舒迪

是的,只要可以进一步乘以Bs。
jkff

定义矩阵乘法所基于的加法和乘法运算(针对位)是什么?您的幼稚算法建议答案分别是“或”和“与”,但这是一个很奇怪的矩阵乘法,因为它们没有定义字段。您是说“异或”而不是“或”?
沃伦·舒迪

不,我的意思是“或”和“与”。我不需要定义字段的操作,这实际上是一个类似于图可达性的问题(我正在计算几个一对多函数的组成)。
jkff

Answers:


11

我不愿回答这个问题,因为据我所知,唯一的理论结果就是我的名字...

从理论上讲,可以预处理一个密集的 ×布尔矩阵以便与稀疏矩阵矢量乘法(在OR和AND的半环上)比朴素的运行时间快。在实践中可能需要大量的黑客攻击才能实现,但我确实认为,对于足够大的和正确的实现,它在实践中会很好。A A nn×nAAn

(注意:此算法仅在一个矩阵密集而另一个矩阵稀疏的情况下才真正有用。这种情况会出现很多,例如,当计算稀疏图的传递闭包时,传递闭包矩阵最终将变得密集与原始邻接矩阵进行比较。)

纸是

Guy E. Blelloch,弗吉尼亚州Vassilevska,Ryan Williams:稀疏图问题的新组合方法。ICALP(1)2008:108-120

并且本文的相关结果是,对于每个,都有一个时间算法,给定 0-1矩阵,以下操作为支持的:O n 2 + εn × n Aε>0O(n2+ε)n×nA

-对于只有非零的任何向量,可以在时间中计算,其中,是满足。(一个不错的设置是和,因此运行时间约为对于任何所需常数。Ť v ø Ñ / ķ + Ñ //登录Ñ ķvtAvO(n(t/k+n/)/logn)k(k)nε=logcnk=ε(logn)/loglognnt/logn+n2/logcnc

-对行和列更新可以在时间内计算。AO(n1+ε)

我们使用此数据结构为稀疏未加权图中的APSP提供了更快的理论算法。


3
我刚刚注意到,您还假设矩阵乘法的输出也很稀疏。在那种情况下,甚至有更快的算法。在网络上搜索“输出敏感矩阵乘法”。
瑞安·威廉姆斯

瑞安·威廉姆斯(Ryan Williams)-我有一个简单的问题:您是否知道,或者您是否探索过任何可以推广稀疏 -1,0,1值矩阵的方法(而不是简单的布尔值)?{1,0,1}
亚历山德拉·卡萨涅

5

我认为您所说的是一个“超稀疏”矩阵(nnz <n)。几年前,我写了一篇关于如何将它们相乘的论文。本质上,它是外部产品的结合,具有巧妙的多路合并功能,从而消除了中间三元组的实现。

Buluc和Gilbert,IPDPS 2008:http://gauss.cs.ucsb.edu/publication/hypersparse-ipdps08.pdf

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.