Algorithm 非负整数矩阵的不可分解性

Algorithm 非负整数矩阵的不可分解性,algorithm,matrix,Algorithm,Matrix,我正在寻找一种算法来测试非负dxd整数矩阵是否不可分解。如果一个矩阵不能写成两个非负dxd整数矩阵的乘积,我称之为不可分解矩阵,它们都不是置换矩阵(即在非负整数矩阵的半环SL_d(N)中不可逆)。我最感兴趣的是行列式为1的3x3矩阵。请注意,1x1矩阵的情况对应于询问正整数是否为素数。对于行列式为1的2x2矩阵,众所周知,唯一不可分解的矩阵是置换矩阵和初等矩阵(这是因为初等矩阵生成整个SL_2(N))。SL_3(N)中有无数已知的不可分解矩阵的例子(J.Rivat“维度3中的不可分解矩阵”附录,

我正在寻找一种算法来测试非负dxd整数矩阵是否不可分解。如果一个矩阵不能写成两个非负dxd整数矩阵的乘积,我称之为不可分解矩阵,它们都不是置换矩阵(即在非负整数矩阵的半环SL_d(N)中不可逆)。我最感兴趣的是行列式为1的3x3矩阵。请注意,1x1矩阵的情况对应于询问正整数是否为素数。对于行列式为1的2x2矩阵,众所周知,唯一不可分解的矩阵是置换矩阵和初等矩阵(这是因为初等矩阵生成整个SL_2(N))。SL_3(N)中有无数已知的不可分解矩阵的例子(J.Rivat“维度3中的不可分解矩阵”附录,Pytheas Fogg“动力学、算术和组合数学中的替换”,Springer LNM)


有一个简单的算法,它包括用B a d x k矩阵和C a k x d矩阵来研究更一般的形式BC=a的因式分解。这样我们就可以开始递归构造。我们用B0填充B的第一列,用C0填充C的第一行,这样B0*C0ok我试着写下我看到的问题:

M = A x B
  • M已知非负整数输入矩阵NxN
  • A、 M的B未知输出分解,非单位,非负整数
矩阵乘法:

M[i][j] = sum(k=0,1,...,N-1)A[i][k]*B[k][j]
好的,现在让我写一个3x3的例子来说明问题:

M[3][3]=A*B

  i  j    i  k    k  j    i  k    k  j    i  k    k  j
M[0][0]=A[0][0]*B[0][0]+A[0][1]*B[1][0]+A[0][2]*B[2][0]
M[0][1]=A[0][0]*B[0][1]+A[0][1]*B[1][1]+A[0][2]*B[2][1]
M[0][2]=A[0][0]*B[0][2]+A[0][1]*B[1][2]+A[0][2]*B[2][2]
M[1][0]=A[1][0]*B[0][0]+A[1][1]*B[1][0]+A[1][2]*B[2][0]
M[1][1]=A[1][0]*B[0][1]+A[1][1]*B[1][1]+A[1][2]*B[2][1]
M[1][2]=A[1][0]*B[0][2]+A[1][1]*B[1][2]+A[1][2]*B[2][2]
M[2][0]=A[2][0]*B[0][0]+A[2][1]*B[1][0]+A[2][2]*B[2][0]
M[2][1]=A[2][0]*B[0][1]+A[2][1]*B[1][1]+A[2][2]*B[2][1]
M[2][2]=A[2][0]*B[0][2]+A[2][1]*B[1][2]+A[2][2]*B[2][2]
// usage of B[i][j]
M[0][0]=A[0][0]*B[0][0]+...
M[1][0]=A[1][0]*B[0][0]+...
M[2][0]=A[2][0]*B[0][0]+...
M[?][j]=A[?][i]*B[i][j]+...
// usage of A[i][j]
M[0][0]=A[0][0]*B[0][0]+...
M[0][1]=A[0][0]*B[0][1]+...
M[0][2]=A[0][0]*B[0][2]+...
M[i][?]=A[i][j]*B[j][?]+...
当你仔细看的时候,解决方案是非常简单的。查找全部:

A[i][j]=GCD(M[i][0],...,M[i][N-1])
然后从M,A或作为B=M*逆(A)导出B

如果至少有一个A[i][j]>1,则M是可分解的

也可以得到B作为GCD,并从M,B


仅此而已,希望能有所帮助

你能把你的问题形式化一点吗?对于给定的矩阵M,你想知道是否存在矩阵a和B,使得M=a x B?总有一个平凡的解a=Identity,B=M,所以没有矩阵是不可分解的…@catchmeifyoutry Right!我指的是非平凡的解决方案(就像整数分解一样)。谢谢。你如何定义非琐碎的事物?这是否意味着A或B都不能是对角的?对于
d>1
,您可以始终编写
M=P*(P^(-1)*M)
,其中
P
是一个非平凡的置换矩阵,每行和每列中正好有一个
1
,其他地方都有
0
。置换矩阵的逆矩阵也是置换矩阵,所以,如果我没有误解你的要求,唯一不可分解的是1×1素数矩阵。你可能也想排除置换矩阵。我建议你在mathoverflow上发布这篇文章。另外,要弄清楚,如果存在因子分解,是需要因子分解,还是只需要回答是/否矩阵是否不可分解。对于1x1,素性测试可以在多项式时间内完成(使用一些有点重的数论,因此你的问题可以说是一个数学问题),但实际生成非素数的因式分解可能很难(NP完全,或者介于NP完全和P之间)。此外,如果您愿意对矩阵的条目设定一个界限(以加快速度),也要让大家知道。