Algorithm 查找具有最大公共集位数的一对位字符串
我想找到一种算法来查找数组中公共集位数最大的一对位字符串(在数组中的所有对中)。我知道通过比较数组中的所有比特串对可以做到这一点,但这是O(n2)。有没有更有效的算法?理想情况下,我希望算法通过在每次迭代中处理一个传入的位字符串来递增工作 例如,假设我们有一个位字符串数组(长度为8): 这里最好的一对是Algorithm 查找具有最大公共集位数的一对位字符串,algorithm,byte,bits,Algorithm,Byte,Bits,我想找到一种算法来查找数组中公共集位数最大的一对位字符串(在数组中的所有对中)。我知道通过比较数组中的所有比特串对可以做到这一点,但这是O(n2)。有没有更有效的算法?理想情况下,我希望算法通过在每次迭代中处理一个传入的位字符串来递增工作 例如,假设我们有一个位字符串数组(长度为8): 这里最好的一对是B2和B3,它们有四个公共设置位 我发现一篇论文似乎描述了这样一种算法(S.Taylor&T.Drummond(2011);“;Int.J.Compute.Vis.94:241–265),但我不理
B2
和B3
,它们有四个公共设置位
我发现一篇论文似乎描述了这样一种算法(S.Taylor&T.Drummond(2011);“;Int.J.Compute.Vis.94:241–265),但我不理解第252页的描述:
这可以在每次迭代中进行增量更新,因为需要重新计算的唯一[bitstring]重叠是新父特征的重叠以及根目录中的任何其他[bitstring],其“最重叠特征”是选择用于组合的两个特征之一。这避免了在每次迭代中进行O(N2)重叠比较的需要,并允许在一秒钟内为700个特征的典型大小的数据库构建一个林
据我所知,Taylor&Drummond(2011)并不打算给出一种O(n)算法,用于在具有最大公共集位数的数组中查找位串对。他们提出了一个论点,即在向数组中添加一个新的位字符串(并删除两个旧的位字符串)后,可以在O(n)中更新最好的这类对的记录 当然,第252页对算法的解释不是很清楚,我认为他们关于记录可以在O(n)中更新的粗略论点充其量是不完整的,所以我可以理解为什么你会感到困惑 无论如何,这是我从论文中解释算法1的最佳尝试 算法 该算法采用一个位字符串数组并构造一个查找树。查找树是一个二叉林(二叉树集),其叶子是数组中的原始位字符串,其内部节点是新位字符串,如果节点A是节点B的父节点,则A&B=A(即,A中的所有集合位也在B中设置) 例如,如果输入是此位字符串数组: 然后输出为查找树: 本文描述的算法如下所述:
- S.Taylor&T.Drummond(2011)。“用于高效和稳健匹配的二进制直方图强度块”。国际计算机杂志。维斯。94:241–265
B1:01010001
B2:01101010
B3:01101010
B4:11001010
B5:00110001