用于实现Coppersmith Freivald算法的C ++程序
Freivalds的算法确定所选k值的矩阵是否相等,且失败概率小于O(kn ^ 2)的2 ^ -k。
它用于验证矩阵乘法。
算法
BeginTake matrix1(n*n), matrix2(n*n), matrix3(n*n) as input.
//根据算法,我们必须验证:
//矩阵1×矩阵2 =矩阵3。
1) Choose vector a[n][1] randomly and uniformly in which component will be 0 or 1.
2) Compute matrix2 * a, matrix3 * a and then matrix1 * (matrix2 * a) for evaluating the expression, matrix1 * (matrix2 * a) - matrix3 * a.
3) Check if matrix1 * (matrix2 * a) - matrix3 * a = 0 or not.
4) If it is zero, then matrix multiplication is correct otherwise not.
End.
示例
#include <iostream>#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char **argv) {
cout << "Enter the dimension of the matrices: ";
int n;
cin >> n;
cout << "Enter the 1st matrix: ";
double matrix1[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix1[i][j];
}
}
cout << "Enter the 2nd matrix: ";
double matrix2[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix2[i][j];
}
}
cout << "Enter the result matrix: ";
double matrix3[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix3[i][j];
}
}
double a[n][1];
for (int i = 0; i < n; i++) {
a[i][1] = rand() % 2;
}
double matrix2a[n][1];
for (int i = 0; i < n; i++) {
for (int j = 0; j < 1; j++) {
for (int k = 0; k < n; k++) {
matrix2a[i][j] = matrix2a[i][j] + matrix2[i][k] * a[k][j];
}
}
}
double matrix3a[n][1];
for (int i = 0; i < n; i++) {
for (int j = 0; j < 1; j++) {
for (int k = 0; k < n; k++) {
matrix3a[i][j] = matrix3a[i][j] + matrix3[i][k] * a[k][j];
}
}
}
double matrix12a[n][1];
for (int i = 0; i < n; i++) {
for (int j = 0; j < 1; j++) {
for (int k = 0; k < n; k++) {
matrix12a[i][j] = matrix12a[i][j] + matrix1[i][k] *matrix2a[k][j];
}
}
}
for (int i = 0; i < n; i++) {
matrix12a[i][0] -= matrix3a[i][0];
}
bool flag = true;
for (int i = 0; i < n; i++) {
if (matrix12a[i][0] == 0)
continue;
else
flag = false;
}
if (flag == true)
cout << "This is the resultant matrix";
else
cout << "This is not the resultant matrix";
}
输出-1
Enter the dimension of the matrices: 2Enter the 1st matrix:
1 2
3 4
Enter the 2nd matrix:
2 0
1 2
Enter the result matrix:
4 4
10 8
This is the resultant matrix
输出-2
Enter the dimension of the matrices: 2Enter the 1st matrix:
1 2
3 4
Enter the 2nd matrix:
2 0
1 2
Enter the result matrix:
4 5
5 5
This is not the resultant matrix
以上是 用于实现Coppersmith Freivald算法的C ++程序 的全部内容, 来源链接: utcz.com/z/322069.html