gpt4 book ai didi

java - 如何检查矩阵是否反对称

转载 作者:行者123 更新时间:2023-11-30 05:55:56 27 4
gpt4 key购买 nike

这是我检查矩阵是否反对称的代码。 (集合 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。另外我用这个作为引用:Representing Relations

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

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)

最佳答案

不对称意味着对于每个 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;
}

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

关于java - 如何检查矩阵是否反对称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53198814/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com