Mysql 如何存储和查询大量矩阵? 问题:
给出了knxm维矩阵(如M1..M5)。值为零且仅为1。如何找到与查询矩阵(如Q)冲突的所有矩阵?冲突意味着如果查询矩阵与数据库中的矩阵在同一位置有一个“1” 示例: 对于这个简单的示例,算法应该为查询找到M1、M2、M3、M4,而不是M5,因为没有与查询矩阵匹配的 M1: M3: +-----------------+ +-----------------+ | 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 1 | | 0 1 1 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | | 0 1 1 0 0 1 1 0 | | 0 0 1 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | | 0 0 1 0 0 0 0 1 | +-----------------+ +-----------------+ M2: M4: +-----------------+ +-----------------+ | 0 0 0 0 0 1 1 0 | | 0 0 0 0 0 0 0 0 | | 0 0 1 1 0 0 0 0 | | 1 1 1 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | +-----------------+ +-----------------+ M5: +-----------------+ | 0 0 0 0 0 0 0 0 | | 0 0 0 0 1 0 0 0 | | 0 0 0 0 0 1 0 0 | | 0 0 0 0 0 0 0 0 | +-----------------+ Q: +-----------------+ | 0 0 0 0 0 0 0 0 | | 0 0 1 0 0 0 0 0 | | 0 0 1 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | +-----------------+ M1:M3: +-----------------+ +-----------------+ | 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 1 | | 0 1 1 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | | 0 1 1 0 0 1 1 0 | | 0 0 1 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | | 0 0 1 0 0 0 0 1 | +-----------------+ +-----------------+ M2:M4: +-----------------+ +-----------------+ | 0 0 0 0 0 1 1 0 | | 0 0 0 0 0 0 0 0 | | 0 0 1 1 0 0 0 0 | | 1 1 1 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | +-----------------+ +-----------------+ M5: +-----------------+ | 0 0 0 0 0 0 0 0 | | 0 0 0 0 1 0 0 0 | | 0 0 0 0 0 1 0 0 | | 0 0 0 0 0 0 0 0 | +-----------------+ 问: +-----------------+ | 0 0 0 0 0 0 0 0 | | 0 0 1 0 0 0 0 0 | | 0 0 1 0 0 0 0 0 | | 0 0 0 0 0 0 0 0 | +-----------------+ 简单的解决方案: 迭代所有矩阵,并按位执行and运算: 匹配: M1:0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 问:零零零零零零零零零零零零零零零零零零零零零零零零零零 -------------------------------------------------------------------------- M1&&Q:0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -------------------------------------------------------------------------- 不匹配: M5:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 问:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -------------------------------------------------------------------------- M5&&Q:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -------------------------------------------------------------------------- 问题:Mysql 如何存储和查询大量矩阵? 问题:,mysql,algorithm,matrix,mariadb,Mysql,Algorithm,Matrix,Mariadb,给出了knxm维矩阵(如M1..M5)。值为零且仅为1。如何找到与查询矩阵(如Q)冲突的所有矩阵?冲突意味着如果查询矩阵与数据库中的矩阵在同一位置有一个“1” 示例: 对于这个简单的示例,算法应该为查询找到M1、M2、M3、M4,而不是M5,因为没有与查询矩阵匹配的 M1: M3: +-----------------+ +-----------------+ | 0 0 0 0 0 0 0 0 | | 0 0 0 0 0
3.本部分的答案取决于系统的限制以及矩阵的组成方式。如果矩阵不是稀疏的,并且您正在查看内存使用情况,那么您可以将行存储为整数的集合,这些整数分解为1和0。如果矩阵是稀疏的,您可以简单地存储一组点 构造另一个矩阵,例如
p
,大小为N*M
,其中每个元素都是大小为k
的位集<如果k
-th矩阵在(i,j)
处有1
,则P(i,j)设置了k
-th位。给定Q
,从空的k
-位集开始,结果
。对于每个(i,j)
,使得Q(i,j)==1
,do结果|=P(i,j)
。该算法需要O(k*N*M)
预处理时间。每个后续查询都在O(N*M*(Q中的1个数))
中运行
M1: 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0
Q: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
--------------------------------------------------------------------------
M1 && Q: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
--------------------------------------------------------------------------
M5: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
Q: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
--------------------------------------------------------------------------
M5 && Q: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
--------------------------------------------------------------------------