algorithm - 三元矩阵的交集

标签 algorithm binary intersection

考虑 3 个二元变量矩阵 b0,b1,b2,b3。所有这些矩阵具有相同的列数,但可以具有不同的行数。矩阵的每个元素可以具有三个值 1、0 或 2,其中 2 表示不关心。我必须找到所有三个矩阵中都存在的二进制字符串。例如,考虑以下 3 个矩阵:

matrix1:
1 0 2 2
2 2 0 0
1 2 1 1

matrix2:
2 2 0 2
1 0 1 2

matrix3:
2 2 1 2
1 2 2 1
2 2 2 1

因此,对于此示例,字符串 b0=1,b1=0,b2=1,b3=1 存在于所有矩阵中。因为,在matrix1中,b0=1,b1=2,b2=1,b3=1与1011相同。在matrix2中,b0=1,b1=0,b2=1,b3=2与1011相同,在matrix3中,b0=2,b1=2,b3=2,b3=1 与 1011 相同。

如何查找所有 3 个矩阵中存在的所有二进制字符串?

最佳答案

这个想法是将每一行“扩展”为其可能性的集合,例如 1022 扩展为:

1000
1001
1010
1011

然后,可以方便地将每个字符串转换为整数(单字节整数,因为“字符串”有 4 位长)并放入排序数组,甚至是集合中。

下一步是按长度从最小到最大对组进行排序,然后迭代最小的组值并查看它是否存在于所有其他组中,由于“解析”步骤中的准备工作,这非常快.

传递给所有组的每个值都是匹配的。

关于algorithm - 三元矩阵的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39084578/

相关文章:

algorithm - 高效构建阈值相似度图

python - 2 个地 block 的交集(鼠尾草)

Haskell - 如何基于二叉树的文件夹创建 mapTree 函数?

iphone - iPhone App提交并删除二进制文件

Python-matplotlib : find intersection of lineplots

javascript - 在javascript数组中执行集合计算

python - 对日期序列进行排序的最 pythonic 方法是什么?

c++ - std::vector 调整大小算法

algorithm - 图片的文字检测

c++ - 二进制字符串到整数与 'atoi()'