我想找到一种算法来找到数组中具有最多公共设置位的位串对(在数组中的所有对中)。我知道可以通过比较数组中的所有位串对来做到这一点,但这是 O( n 2 )。有没有更高效的算法?理想情况下,我希望算法通过在每次迭代中处理一个传入的位串来增量工作。
例如,假设我们有这个位串数组(长度为 8):
B1:01010001
B2:01101010
B3:01101010
B4:11001010
B5:00110001
这里最好的对是B2
and B3
,它有四个共同的设置位。
我发现一篇似乎描述了这种算法的论文(S. Taylor & T. Drummond (2011);“ Binary Histogrammed Intensity Patches for Efficient and Robust Matching ”;Int. J. Comput. Vis. 94:241–265),但我不明白第 252 页的描述:
这可以在每次迭代中增量更新,因为唯一需要重新计算的 [bitstring] 重叠是新父特征的重叠以及根中“最重叠特征”是选择组合的两个特征之一的任何其他 [bitstrings]。这避免了在每次迭代中进行 O(N 2 ) 重叠比较的需要,并允许在一秒钟内构建一个包含 700 个特征的典型大小的数据库的森林。