今天看了算法如下:1.求一个二维数组i和j互质的情况,就是求i和j的公约数只能为1.采用求最大公约数的算法实现。
2.求向量的相乘,具体实现算法:需要判断两个数组长度是否一致。
3.求两个二维数组的乘积,主要是注意行等于列的情况,中间值k一定为第一个数组的列或者是第二个数组的行。
1.向量乘积:
result += a[i]*b[i];
具体代码:
public static double
dot(
double[] x
, double[] y){
//向量点乘
double result =
0
;
if(x.
length == y.
length){
for
(
int
i =
0
;
i < x.
length
;
i ++)
result += x[i] * y[i]
;
//不用加括号,优先级是不一样的
}
else
{
StdOut.
println
(
"Error!"
)
;
return
result
;
}
return result
;
}
2.向量相乘:MxN * NxP, M与P不一定相等,因为超出的部分为零。
其中设置共同的部分N为k值。
代码如下:
public static double[][]
mult(
double[][] a
, double[][] b){
//矩阵与矩阵之积 [M][N] * [N][P] = [M][P]
if (a[
0].
length == b.
length){
double
[][] result =
new double
[a.
length
][b[
0
].
length
]
;
//第一个是行,第二个是列
for
(
int
i =
0
;
i < result.
length
;
i ++)
for
(
int
j =
0
;
j < result[i].
length
;
j ++)
for
(
int
k =
0
;
k < b.
length
;
k ++)
//这里b.length 可以换为 a[0].length
result[i][j] += a[i][k] * b[k][j]
;
return
result
;
}
else
{
StdOut.
println
(
"Error!!!"
)
;
return null;
}
}
3.转置矩阵:
就是从新设置一个数组,让他的大小满足转置后的条件,比如[i][j] 变为[j][i] .将原来数组的内容复制过去就可以了。
代码如下:
public static double[][]
transpose(
double[][] a){
//转置矩阵
double[][] result =
new double[a[
0].
length][a.
length]
;
for(
int i =
0
; i < a.
length
; i ++){
for
(
int
j =
0
;
j < a[
0
].
length
;
j ++){
result[i][j] = a[j][i]
;
}
}
return result
;
}