簡體   English   中英

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

[英]What's the fastest way to represent and multiply sparse boolean matrices?

所以,我使用的是布爾矩陣,其維數通常是幾十到幾百,它們通常非常稀疏(在大多數行和列中只有2-4個非零),並且我的運行時間由它們的乘法主導。

在這些情況下,哪種數據結構最適合加速乘法?

目前我將每個矩陣存儲在一個連續的bitset(64位長的數組)中,並且基本上將它們與標准算法相乘,只需加快稀疏性,快速操作就可以找到一個字中的下​​一個設置位,以及通過位掩碼操作進行矢量化。

我是否應該使用一些稀疏表示呢?

您可能需要考慮使用四叉樹表示。 四叉樹可以很好地編碼稀疏矩陣,並且適用於非常簡單(和緩存有效)的遞歸乘法實現。 使基本情況為8x8矩陣,以便您可以將乘法實現為(程序集優化的?)64位乘64位運算。

我認為使用稀疏表示是有意義的。 即使有一些非零的索引也很簡單,我認為你會獲得更好的性能。

例如,對於具有300個非零元素的100×100矩陣,使用2D陣列表示,乘法需要100×100×100 = 1,000,000“操作”。 使用索引集只需要300×300 = 90,000次操作。 (當然這些操作不能直接比較。)

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

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

這意味着在0,12處有一個0,2 a 1,等等。

好的部分是你並不真正需要一種新的數據類型,它只是簡單地解析。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM