【问题标题】:How to generate matrices which satisfy the triangle inequality?如何生成满足三角不等式的矩阵?
【发布时间】:2013-06-10 06:21:04
【问题描述】:

让我们考虑方阵

(n 是矩阵 E 的维数并且是固定的(例如 n = 4 或 n=5))。矩阵条目 满足以下条件:

任务是生成所有矩阵 E。我的问题是如何做到这一点?有没有通用的方法或算法?这甚至可能吗?从什么开始?

【问题讨论】:

  • 矩阵的维数是多少? n * n?
  • 是的。它是 n * n。我们正在考虑固定维度的矩阵,例如 n = 4 并生成它们。
  • 单独考虑矩阵大小和元素范围很有用。查看维度为n 的矩阵E(n,k),其元素范围为0..k,满足您的条件。假设您可以生成所有这些。现在你需要什么来生成所有E(n+1,k)
  • 如果没有它也能解决问题,当然不用考虑。
  • @RBarryYoung:哪个条件说明了a(0,0) + a(1,1)

标签: algorithm math matrix


【解决方案1】:

朴素的解决方案

要考虑的一个简单的解决方案是生成所有可能的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 具有通常的定义,但省略了对称性要求。

  • IJ 对集合N 进行分区。当iIjJ 中时,让D(I,J) 成为n x n 矩阵,D_ij = 1D_ij = 0 中,否则D_ij = 0

    李>
  • ABS 中。那么AB相邻当且仅当存在IJ 分区N 使得A + D(I,J) = B

    我们说AB 相邻当且仅当AB 相邻或B 与@987654360 相邻@。

  • S 中的两个矩阵AB路径连接当且仅当存在@ 的相邻元素序列987654364@他们之间。

  • 让函数M(E)表示矩阵E的元素之和。

引理 1:
E = D(I,J)N 上的一个指标。

证明:
除了边从IJ 的情况外,这是一个简单的陈述。让iIjJ。然后E_ij = 1 定义为D(I,J)。让kN 中。如果kI 中,则E_ik = 0E_kj = 1,所以E_ik + E_kj >= E_ij。如果kJ 中,那么E_ik = 1E_kj = 0,那么E_ij + E_kj >= E_ij

引理 2:
ES 中,这样E != zeros(n,n)。然后存在IJ 分区N 使得E' = E - D(I,J)SM(E') < M(E) 中。

证明:
(i,j) 等于E_ij > 0。设IN 的子集,可以通过成本0 的有向路径从i 到达。 I 不能为空,因为 iI 中。 I 不能是N,因为j 不在I 中。这是因为E满足三角不等式和E_ij > 0

J = N - I。那么IJ 都是非空的并且分区N。根据I 的定义,不存在任何(x,y) 使得E_xy = 0xI 中,而yJ 中。因此,E_xy >= 1 用于 I 中的所有 xJ 中的 y

因此E' = E - D(I,J) >= 0M(E') < M(E) 是显而易见的,因为我们所做的只是从 E 的元素中减去以得到 E'。现在,由于EN 上的一个度量,而D(I,J)N(由引理1)和E >= D(I,J) 上的一个度量,我们有E' 是一个关于N。因此E'S 中。

定理:
ES 中。那么Ezeros(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 是路径连接的。

证明:
ABS 中。根据定理AB 都路径连接到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)。

请注意,在上一段中,ED(I,J) 都是 N 上的指标。因此,当您生成E' = E + D(I,J) 时,您不必检查它是否满足三角不等式 - E' 是两个指标的总和,因此它是一个指标。要检查E' 是否在S 中,您只需验证E' 中的最大元素不超过n

您可以从S 的任何元素开始广度优先搜索,并保证不会错过任何S。所以你可以用zeros(n,n)开始搜索。


请注意,随着 n 的增加,集合 S 的基数增长得非常快,因此计算整个集合 S 将仅适用于小的 n

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多