【问题标题】:How to check if a matrix is antisymmetric如何检查矩阵是否反对称
【发布时间】:2018-11-07 22:25:47
【问题描述】:

这是我检查矩阵是否反对称的代码。 (集合 A 上的关系 R 称为反对称当且仅当对于 A 中的任何 a 和 b,只要 R 中的 (a,b) 和 R 中的 (b,a) ,a = b 必须成立。)

// AntiSymmetric
public static boolean checkAntisymmetric(Graph graph, int vertices){
    boolean antisymmetric = false;
    for(int i = 1; i <= vertices; i++) {
        for(int j = 1; j <= vertices; j++){
            if((graph.getEdge(i, j) == graph.getEdge(j, i)) && (i == j)){
                antisymmetric = true;
                break;
            }
        }
    }
    if(antisymmetric){
        return true;
    }
    else {
        return false;
    }
}

而我的 getEdge 函数是:

public int getEdge(int to, int from){
    try{
        return adjencencyMatrix[to][from];
    } catch(ArrayIndexOutOfBoundsException index){
        System.out.println("Vertices does not exist");
    }
    return -1;
}

例如,如果我给出由对表示的边: (2,3) (3,5) (3,2) (5,1) (4,4) 由于 (4,4),它应该返回 false。 另外我以此为参考:

我能够创建一个函数来检查矩阵是否确实对称。唯一不同的是我的反对称函数在 if 语句中具有条件 (i == j)。有人能明白为什么它总是返回真实吗?谢谢。 这里显示了一个我用来测试函数的示例矩阵:

0 0 0 0 0
0 0 1 0 0
0 1 0 0 1
0 0 0 0 0
1 0 0 0 0

对于对:(2,3) (3,5) (3,2) (5,1)

【问题讨论】:

  • 删除了我的答案,因为“反对称”不是“对称”的对立面:-)(很久以前......)
  • 感谢您的反馈!

标签: java matrix multidimensional-array


【解决方案1】:

不对称意味着对于每个 i, j 其中 i != j, M(i, j) == 0 或 M(j, i) == 0。

您目前的状况:

if((graph.getEdge(i, j) == graph.getEdge(j, i)) && (i == j))

由于i == j 在您的情况下,您正在检查矩阵中心的对角线。这意味着getEdge(i, j) == getEdge(i, i) == getEdge(j, j) == getEdge(j, i),因为i == j。因此,由于您将矩阵条目与自身进行比较,因此您的检查将始终通过。

尝试实现您提供的定义中指定的条件,它基本上说明两者之一必须是0

if((graph.getEdge(i, j) == 0 || graph.getEdge(j, i) == 0) && (i != j))

但是,您跳出循环的逻辑也存在缺陷,因为如果第一对满足此条件而不是整个矩阵,您将返回 true。尝试检查失败并提前退出,否则如果你通过矩阵而没有失败,那么你知道每一对的条件都是成功的,并且矩阵是不对称的:

// AntiSymmetric
public static boolean checkAntisymmetric(Graph graph, int vertices){
    for(int i = 1; i <= vertices; i++) {
        for(int j = 1; j <= vertices; j++){
            if((i != j) && graph.getEdge(i, j) != 0 && graph.getEdge(j, i) != 0) {
                return false;
            }
        }
    }
    return true;
}

我们基本上检查是否有任何对不满足条件。

【讨论】:

  • 这很有帮助!我会做一些改变,看看我能不能弄清楚。
  • 谢谢!代码终于修好了!现在我必须研究及物传递......我认为这很难哈哈哈。我会再花5个小时哈哈哈。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2017-08-12
  • 2021-03-17
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2015-09-19
  • 2019-03-09
  • 2022-01-15
相关资源
最近更新 更多