Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何存储和查询大量矩阵? 问题:_Mysql_Algorithm_Matrix_Mariadb - Fatal编程技术网

Mysql 如何存储和查询大量矩阵? 问题:

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

给出了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 -------------------------------------------------------------------------- 问题:
  • 这可以在次线性时间内完成吗
  • 有没有比给定的天真方法更好的算法
  • 在数据库中存储和查询矩阵数据的好方法是什么
  • 问题3的说明: 我考虑将矩阵的整数值存储在MySQL表中,并使用MySQL逐位查询来查找它们。如果矩阵变得更大(例如100x100),这会起作用吗

    1和2。可以使用稀疏矩阵方法获得亚线性(
    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 --------------------------------------------------------------------------