这个问题可能比编程更数学。我还没有找到最终的答案,但至少有一些想法在这里:
我们可以通过以下方式重新陈述问题。
问题 A:修正正整数m和n. 设S是其条目为或的n维向量集。是否存在其条目为或的任何by矩阵,使得对于任何两个不同的向量和在 中,向量和是不同的。(或者,您可能会说,矩阵,被认为是从维向量到维向量的应用,在集合 上是单射的。)01mnM01v_1v_2SMv_1Mv_2MnmS
简而言之:给定对(m, n),是否存在这样的单射M?
问题 A 等价于原问题。实际上,如果Mv_1 = Mv_2对于两个不同的v_1和v_2,S那么我们有M(v_1 - v_2) = 0,并且向量v_1 - v_2将只有0, 1,- 1作为条目。反之亦然。
另一种重新解释是:
问题 B:设m,n是一个正整数,并且是其条目为和的维向量S的集合。我们能否找到中的向量,使得对于任何一对不同的向量和中,存在一个满足的?这是通常的内积。n01mr_1, ..., r_mSv_1v_2Sr_i<v_1, r_i> != <v_2, r_i><x, y>
简而言之:我们可以通过取内积来选择m向量S来区分每个人吗?S
问题 B 等价于问题 A,因为您可以用 中的M向量m来识别矩阵S。
在下文中,我将自由地使用这两种问题的描述。
如果问题 A(或 B)的答案是yes ,我们就称这对(m, n)为“好对” 。
通过对问题 B 的描述,很明显,对于给定的n,存在一个极小m这样(m, n)的一对。让我们m(n)为这个最小m关联来写n。
类似地,对于给定的m,有一个最大值n是(m, n)好的。这是因为,如果(m, n)是好的,即存在M问题 A 中所述的单射,那么对于任何n' <= n,擦除 的任何n - n'列M都会给出单射M'。让我们写这个与 相关的n(m)最大值。nm
所以任务变成了计算函数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)
[M 0]
[0 K]
为这对工作(m(n) + 1, n + 1)。为了看到这一点,让v_1和v_2是任何一对不同的(n + k)维向量。我们可以将它们都分成两部分:第一个n条目和最后一个k条目。如果它们的前几部分不相等,则可以通过m(n)上述矩阵的第一行之一来区分它们;如果它们的第一部分相等,则它们的第二部分必须不同,因此可以通过m(k)上述矩阵的最后一行之一来区分它们。
备注:m(n)因此该序列是次加法序列。
一个简单的推论:
推论 2:我们有m(n + 1) <= m(n) + 1,因此m(n) <= n。
证明:k = 1引入引理 1。
请注意,从m(n)您的其他已知值可以获得更好的上限。例如,既然我们知道m(4) <= 3,我们就有m(4n) <= 3n。无论如何,这些总是给你O(n)上限。
下一个引理给你一个下限。
引理 3 m(n) >= n / log2(n + 1):。
证明:设T是一组m(n)维向量,其条目位于 中{0, 1, ..., n}。任何m(n)byn矩阵M都会给出一个映射 fromS到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)。
回到编程
我不得不说我还没有想出一个好的算法。您可以将问题重述为Set Cover Problem,如下所示:
令U为具有条目或的n维度向量集1,并令如上。中的每个向量都给出 : 的子集。那么问题是:我们能否找到使得子集的并集等于的向量。0- 1SwSC_wUC_w = {v in U: <w, v> != 0}mwC_wU
一般的 Set Cover 问题是 NP 完全问题,但在上面的 Wiki 链接中有一个整数线性规划公式。
n = 10无论如何,我猜这不能让你走得更远。
如果我有进一步的结果,我会继续编辑这个答案。