【发布时间】:2010-05-13 10:00:02
【问题描述】:
给定一个大小为 L 的向量 X,其中 X 的每个标量元素都来自二进制集合 {0,1},如果大小为 L 的向量 Y 由的整数值元素。我建议,必须有一种非常快速的方法来做到这一点。
假设我们有L=4; X[L]={1, 0, 0, 1}; Y[L]={-4, 2, 1, 0},我们必须找到z=X[0]*Y[0] + X[1]*Y[1] + X[2]*Y[2] + X[3]*Y[3](在这种情况下会给我们-4)。
很明显,X 可以用二进制数字表示,例如L=32 的整数类型 int32。然后,我们要做的就是找到这个整数与 32 个整数数组的点积。您对如何快速完成有任何想法或建议?
【问题讨论】:
-
您的数据有多大和有多稀疏?
-
“很明显,X 可以用二进制数字表示”——是的,但这并不明显会带来任何性能改进。当然,除非内存大小很重要。是这样吗?
-
您的特殊情况是否足够特殊以至于您可以依赖扩展?例如,对于任何类型的 SIMD,使用向量运算可能比将 X 打包到位域中获得更多的速度优势。您必须进行比较。
-
@Konrad:对于一般算法,内存大小无关紧要
-
L 是固定常数吗?如果是这样,那么它可能会对最佳解决方案产生一些影响......您可以提供的任何信息/约束通常都有助于找到更快的解决方案。