考虑m乘n矩阵M,其所有条目都是0或1.对于给定的M,问题是是否存在非零向量v,其所有条目都是-1,0或1,其中Mv = 0.例如,
[0 1 1 1]
M_1 = [1 0 1 1]
[1 1 0 1]
在这个例子中,没有这样的矢量v。
[1 0 0 0]
M_2 = [0 1 0 0]
[0 0 1 0]
在此示例中,向量(0,0,0,1)给出M_2v = 0。
给定m和n,我想找到是否存在这样的M,以便没有非零v,使得Mv = 0。
如果m = 3
和n = 4
,则答案为是,如上所示。
我目前正在通过尝试所有不同的M和v来解决这个问题。
但是,是否可以将问题表示为整数 编程问题或约束编程问题,所以我可以使用 现有的软件包,比如SCIP,可能更多 高效。
答案 0 :(得分:6)
这个问题可能比编程更具数学性。我还没有找到最终的答案,但至少有一些想法在这里:
我们可以通过以下方式重新陈述问题。
问题A:修复正整数
m
和n
。设S
为n
维向量的集合,其条目为0
或1
。是否有m
个n
矩阵M
,其条目为0
或1
,这样,对于任意两个不同的向量v_1
和v_2
S
中Mv_1
,向量Mv_2
和M
不同。 (或者,您可以这样说,矩阵n
,被视为m
的应用 - 维向量到S
- 维向量,在集合(m, n)
上是单射的。 )
简而言之:给出M
对,是否存在这样的内射Mv_1 = Mv_2
?
问题A等同于原始问题。实际上,如果v_1
对v_2
中的两个S
和M(v_1 - v_2) = 0
v_1 - v_2
0
,那么我们会1
,而- 1
只会{ {1}},m
,n
作为条目。反过来显然也是如此。
另一个重新解释是:
问题B:让
S
,n
为正整数,0
为1
维向量的集合,其条目为m
和{ {1}}。我们可以在r_1, ..., r_m
中找到S
向量v_1
,这样,对于v_2
中的任何一对不同向量S
和r_i
,都存在一个<v_1, r_i> != <v_2, r_i>
,满足<x, y>
?这里m
是通常的内在产品。
简而言之:我们可以在S
中选择S
向量来区分M
中的所有人,将内部产品与所选产品区分开来吗?
问题B等同于问题A,因为您可以在m
中使用S
向量识别矩阵(m, n)
。
在下文中,我将自由地使用这两个问题的描述。
让我们调用n
对&#34; 好对&#34;如果问题A(或B)的答案是是。
对于问题B的描述,很明显,对于给定的m
,存在最小(m, n)
,使得m(n)
是一对好的。让我们为与m
相关联的最小n
撰写m
。
同样,对于给定的n
,有一个最大(m, n)
,(m, n)
是好的。这是因为,如果M
是好的,即问题A中有一个内射n' <= n
,那么对于任何n - n'
,删除{{1}的任何M
列将给出一个单独的M'
。让我们为与n(m)
相关联的最大n
撰写m
。
因此,任务变为计算函数m(n)
和/或n(m)
。
我们首先证明了几个引理:
引理1:我们有
m(n + k) <= m(n) + m(k)
。
证明:M
m(n)
n
(m(n), n)
{}} {}} K
m(k)
k
(m(k), k)
(m(n) + n(k))
(n + k)
1}}对[M 0]
[0 K]
的内射矩阵,然后(m(n) + 1, n + 1)
到v_1
矩阵
v_2
适用于(n + k)
对。要查看此内容,请n
和k
为任意一对不同的m(n)
维向量。我们可以将它们分成两部分:第一个m(k)
条目和最后m(n)
个条目。如果它们的第一部分不相等,则可以通过上述矩阵的第一m(n + 1) <= m(n) + 1
行之一来区分它们;如果它们的第一部分是相等的,那么它们的第二部分必须是不同的,因此它们可以通过上述矩阵的最后m(n) <= n
行之一来区分。
备注:序列
k = 1
因此是subadditive序列。
一个简单的推论:
推论2:我们
m(n)
,因此m(4) <= 3
。
证明:在引理1中取m(4n) <= 3n
。
请注意,从O(n)
的其他已知值可以获得更好的上限。例如,由于我们知道m(n) >= n / log2(n + 1)
,因此我们有T
。无论如何,这些总是给你m(n)
上限。
下一个引理会给你一个下限。
引理3:
{0, 1, ..., n}
。
证明:让m(n)
成为n
维向量的集合,其条目位于M
。任何S
到T
矩阵v
都会提供从Mv
到M
的地图,并将T
发送到S
。
由于存在T
使得上述地图是单射的,因此集合(n + 1)^m
的大小必须至少是集合S
的大小。 2^n
的尺寸为(n + 1)^m(n) >= 2^n
,m(n) >= n / log2(n + 1)
的尺寸为U
,因此我们有:
n
或等效地,1
。
我不得不说我还没有想出一个好的算法。 您可以将问题重新表述为Set Cover Problem,如下所示:
让0
成为包含- 1
,S
或w
条目的S
维向量集合,让C_w
如上所述。 U
中的每个向量C_w = {v in U: <w, v> != 0}
都提供了m
w
的子集C_w
。问题是:我们是否可以找到U
向量n = 10
,以便子集{{1}}的并集等于{{1}}。
一般的封面问题是NP完整的,但在上面的Wiki链接中有一个整数线性程序公式。
无论如何,我认为这不会比{{1}}更进一步。
如果我有进一步的结果,我会继续编辑这个答案。
答案 1 :(得分:3)
我认为使用布尔矩阵乘法将允许您解决Mv = 0问题,只有1&amp; s&amp; 0更有效率。使用这种方法,您应该能够解决,而不必担心由于RHS等于零而导致的排名缺陷。以下是使用BMM的一些算法的文档链接:
答案 2 :(得分:0)
如果我理解了这个问题,那么如果存在矩阵M(线性变换),则需要给定的m,n,其具有平凡的核,即Ker(M)= {0}。
回想一下,这与M的Nullspace为零0,Null(M)= 0相同。
对于系统Mv = 0,如果矩阵M的秩等于v的维数,则零空间为{0}。所以你的问题归结为询问是否存在具有秩dim的mxn矩阵(v) =米。 这种形式的问题已经在这里讨论了
Generate "random" matrix of certain rank over a fixed set of elements
您还可以根据决定因素来构建此问题,因为如果M具有determinant = 0,那么nullspace是非常重要的。因此,您可以根据{-1,0,1}中带有所需行列式的条目构建矩阵来考虑这个问题。
我希望这会有所帮助。