gpt4 book ai didi

c++ - 矩阵行列式算法C++

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:35 28 4
gpt4 key购买 nike

我是编程新手,我一直在寻找一种方法来找到矩阵的行列式。我在网上找到了这段代码,但我很难理解这里的算法。我对 recursion 的基础没有问题,但是我无法理解 continue 和 main 循环。非常感谢任何可以向我解释算法的人。

int determ(int a[MAX][MAX],int n) {
int det=0, p, h, k, i, j, temp[MAX][MAX];
if(n==1) {
return a[0][0];
} else if(n==2) {
det=(a[0][0]*a[1][1]-a[0][1]*a[1][0]);
return det;
} else {
for(p=0;p<n;p++) {
h = 0;
k = 0;
for(i=1;i<n;i++) {
for( j=0;j<n;j++) {
if(j==p) {
continue;
}
temp[h][k] = a[i][j];
k++;
if(k==n-1) {
h++;
k = 0;
}
}
}
det=det+a[0][p]*pow(-1,p)*determ(temp,n-1);
}
return det;
}
}

最佳答案

该算法使用分而治之的方法来解决问题(找到 N*N 矩阵的行列式)。

该算法使用递归模式,这是一种分而治之的方法。您可以通过注意算法在第三个条件语句中调用自身来找出这一点。

每个递归算法都有一个退出条件,即代码中的第一个 if 语句。它们还包含一个部分,它是最方便的问题的解决方案或主要大问题的一个原子问题,首先很难解决。原子问题或最 split 的问题可以很容易地解决,因为您可以看到代码的第二个 if 语句。在您的情况下,它实际上是在求解 2*2 矩阵的行列式。

你的代码中最重要的部分是你做除法的部分(这也是递归的!)。这部分是征服其中任何一个的关键。通过做一些回溯和数值示例,您可以找到答案:

det = det + a[0][p] * pow(-1,p) * determ(temp,n-1);

对于最后的建议,请尝试只需要一次除法的 3*3 矩阵。祝你好运。

This book is a great one to start studying and understanding algorithms

关于c++ - 矩阵行列式算法C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21220504/

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