फ्राइवल्ड का एल्गोरिदम यह निर्धारित करता है कि चुने गए k मान के लिए मैट्रिक्स 2^-k से कम विफलता की संभावना के साथ O(kn^2) में समान हैं या नहीं।
इसका उपयोग मैट्रिक्स मल्टीप्लिकेशन को सत्यापित करने के लिए किया जाता है।
एल्गोरिदम
Begin matrix1(n*n), matrix2(n*n), matrix3(n*n) को इनपुट के रूप में लें। // एल्गोरिदम के अनुसार हमें सत्यापित करना है: // matrix1 × matrix2 = matrix3। 1) वेक्टर a[n][1] को रैंडमली और यूनिफॉर्मली चुनें जिसमें कंपोनेंट 0 या 1 होगा। 2) matrix2 * a, matrix3 * a कैलकुलेट करें और फिर एक्सप्रेशन matrix1 * (matrix2 * a) - matrix3 * a का मूल्यांकन करने के लिए matrix1 * (matrix2 * a) कैलकुलेट करें। 3) जांचें कि matrix1 * (matrix2 * a) - matrix3 * a = 0 है या नहीं। 4) यदि यह शून्य है, तो मैट्रिक्स मल्टीप्लिकेशन सही है अन्यथा नहीं। 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: 2 Enter 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: 2 Enter 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