朴素的解决方案
要考虑的一个简单的解决方案是生成所有可能的n-by-n 矩阵E,其中每个分量都是不大于n 的非负整数,然后仅从那些矩阵中获取满足额外的约束。那会有什么复杂性?
每个分量都可以取n + 1值,有n^2分量,所以有O((n+1)^(n^2))候选矩阵。这具有极高的增长率。
链接:WolframAlpha analysis of (n+1)^(n^2)
我认为这不是一种可行的方法是安全的。
更好的解决方案
以下是更好的解决方案。它涉及很多数学。
让S 成为满足您要求的所有矩阵E 的集合。让N = {1, 2, ..., n}.
定义:
让N 上的metric 具有通常的定义,但省略了对称性要求。
-
让I 和J 对集合N 进行分区。当i 在I 和j 在J 中时,让D(I,J) 成为n x n 矩阵,D_ij = 1 在 D_ij = 0 中,否则D_ij = 0。
李>
-
让A 和B 在S 中。那么A 与B相邻当且仅当存在I 和J 分区N 使得A + D(I,J) = B。
我们说A 和B 相邻当且仅当A 与B 相邻或B 与@987654360 相邻@。
S 中的两个矩阵A 和B 是路径连接当且仅当存在@ 的相邻元素序列987654364@他们之间。
让函数M(E)表示矩阵E的元素之和。
引理 1:
E = D(I,J) 是 N 上的一个指标。
证明:
除了边从I 到J 的情况外,这是一个简单的陈述。让i 在I 和j 在J。然后E_ij = 1 定义为D(I,J)。让k 在N 中。如果k 在I 中,则E_ik = 0 和E_kj = 1,所以E_ik + E_kj >= E_ij。如果k 在J 中,那么E_ik = 1 和E_kj = 0,那么E_ij + E_kj >= E_ij。
引理 2:
让E 在S 中,这样E != zeros(n,n)。然后存在I 和J 分区N 使得E' = E - D(I,J) 在S 和M(E') < M(E) 中。
证明:
让(i,j) 等于E_ij > 0。设I 是N 的子集,可以通过成本0 的有向路径从i 到达。 I 不能为空,因为 i 在 I 中。 I 不能是N,因为j 不在I 中。这是因为E满足三角不等式和E_ij > 0。
让J = N - I。那么I 和J 都是非空的并且分区N。根据I 的定义,不存在任何(x,y) 使得E_xy = 0 和x 在I 中,而y 在J 中。因此,E_xy >= 1 用于 I 中的所有 x 和 J 中的 y。
因此E' = E - D(I,J) >= 0。 M(E') < M(E) 是显而易见的,因为我们所做的只是从 E 的元素中减去以得到 E'。现在,由于E 是N 上的一个度量,而D(I,J) 是N(由引理1)和E >= D(I,J) 上的一个度量,我们有E' 是一个关于N。因此E' 在S 中。
定理:
让E 在S 中。那么E 和zeros(n,n) 是路径连接的。
证明(通过归纳):
如果E = zeros(n,n),那么这个语句是微不足道的。
假设E != zeros(n,n)。令M(E) 为E 中值的总和。然后,通过归纳,我们可以假设该陈述对于具有M(E') < M(E) 的任何矩阵E' 都是正确的。
由于E != zeros(n,n),根据引理2,我们在S 中有一些E',这样M(E') < M(E)。然后通过归纳假设E' 路径连接到zeros(n,n)。因此E 路径连接到zeros(n,n)。
推论:
集合S 是路径连接的。
证明:
让A 和B 在S 中。根据定理,A 和B 都路径连接到zeros(n,n)。因此A 路径连接到B。
算法
推论告诉我们S 中的所有内容都是路径连接的。因此,发现S 的所有元素的有效方法是对以下定义的图执行广度优先搜索。
-
S 的元素是图的节点
- 图的节点由边连接当且仅当它们是相邻的
给定一个节点E,您可以通过简单地枚举所有可能的矩阵D(I,J)(其中有2^n)并生成E' = E + D(I,J)来找到E的所有(可能)未访问的邻居对于每个。枚举D(I,J) 应该相对简单(对于D 的每个可能的子集I 都有一个,除了空集和D)。
请注意,在上一段中,E 和 D(I,J) 都是 N 上的指标。因此,当您生成E' = E + D(I,J) 时,您不必检查它是否满足三角不等式 - E' 是两个指标的总和,因此它是一个指标。要检查E' 是否在S 中,您只需验证E' 中的最大元素不超过n。
您可以从S 的任何元素开始广度优先搜索,并保证不会错过任何S。所以你可以用zeros(n,n)开始搜索。
请注意,随着 n 的增加,集合 S 的基数增长得非常快,因此计算整个集合 S 将仅适用于小的 n。