表示和乘以稀疏布尔矩阵的最快方法是什么?

时间:2010-09-05 13:51:04

标签: algorithm performance data-structures matrix bit-manipulation

所以,我使用的布尔矩阵的维度通常是几十到几百,它们通常非常稀疏(在大多数行和列中只有2-4个非零)并且我的运行时间主要由他们的乘法。

在这些情况下,哪种数据结构最适合加速乘法?

目前我将每个矩阵存储在一个连续的bitset(64位长的数组)中,并且基本上将它们与标准算法相乘,只需通过定位下一个设置位的快速操作来加速稀疏性总而言之,通过位掩码操作进行矢量化。

我是否应该使用一些稀疏表示呢?

3 个答案:

答案 0 :(得分:4)

您可能需要考虑使用四叉树表示法。四叉树可以很好地编码稀疏矩阵,并且适用于非常简单(和缓存有效)的递归乘法实现。使基本情况为8x8矩阵,以便您可以将乘法实现为(程序集优化的?)64位乘64位运算。

答案 1 :(得分:0)

我认为使用稀疏表示是有意义的。即使有一些非零指数这样简单的东西,我认为你会获得更好的表现。

例如,对于具有300个非零元素的100×100矩阵,使用2D阵列表示,乘法需要100×100×100 = 1,000,000“操作”。使用索引集只需要300×300 = 90,000次操作。 (当然,这些操作无法直接比较。)

答案 2 :(得分:0)

1的x和y的列表。例如:

[0,2,0,12,0,60,1,2,1,39 ......等]

这意味着在0,12等处有0,2 a 1,等等。

很好的部分是你并不真的需要一种新的数据类型,而且它只是简单地解析。

要相乘,您需要查找所有匹配/部分匹配的索引。