如果标题有误导性,我很抱歉,但我真的不知道如何解决这个问题。
基本上,问题如下:我们有一个位向量T和一个位向量P.
让我们说P [a1],P [a2],...,P [ak]是P中的1位。我有兴趣知道,对于T中的每个位置,有多少位1是P [i + a1],P [i + a2],...,P [i + ak]。这就像把P作为掩码放在从i开始的子串上,并检查最后有多少位1。如果数字不可能及时得到,那么检查所有位是否都是1就足够了。
是否有更好的算法可以解决这个问题(优于O(T * P)"天真""滑动"从一个位置到另一个位置的模式并计算数字发生的事情)?
在这种情况下,即使是更好的乘法常数也会很棒。我听说你可以在C ++上使用bitset并获得像O(1/32 * T *(T-P))这样的东西,但是我对bitsets及其操作方式不是很熟悉等等。是否可以对bitset进行快速(&)操作?