Thuật toán của Freivalds xác định liệu các ma trận có bằng nhau đối với một giá trị k đã chọn với xác suất thất bại nhỏ hơn 2 ^ -k trong O (kn ^ 2) hay không.
Nó được sử dụng để xác minh phép nhân ma trận.
Thuật toán
Begin Lấy ma trận1 (n * n), ma trận2 (n * n), ma trận3 (n * n) làm đầu vào. // Theo thuật toán, chúng ta phải xác minh:// matrix1 × matrix2 =matrix3. 1) Chọn vectơ a [n] [1] ngẫu nhiên và thống nhất trong đó thành phần sẽ là 0 hoặc 1. 2) Tính ma trận2 * a, ma trận3 * a và sau đó ma trận1 * (ma trận2 * a) để đánh giá biểu thức, ma trận1 * ( ma trận2 * a) - ma trận3 * a. 3) Kiểm tra xem ma trận1 * (matrix2 * a) - ma trận3 * a =0 hay không. 4) Nếu nó là 0, thì phép nhân ma trận là đúng, ngược lại thì không.Ví dụ
#include#include #include using namespace std; int main (int argc, char ** argv) {cout <<"Nhập kích thước của ma trận:"; int n; cin>> n; cout <<"Nhập ma trận thứ 1:"; ma trận kép1 [n] [n]; for (int i =0; i > matrix1 [i] [j]; }} cout <<"Nhập ma trận thứ 2:"; ma trận kép2 [n] [n]; for (int i =0; i > matrix2 [i] [j]; }} cout <<"Nhập ma trận kết quả:"; ma trận kép3 [n] [n]; for (int i =0; i > matrix3 [i] [j]; }} nhân đôi a [n] [1]; for (int i =0; i Đầu ra - 1
Nhập kích thước của ma trận:2 Nhập ma trận thứ nhất:1 23 4 Nhập ma trận thứ hai:2 01 2 Nhập ma trận kết quả:4 410 8Đây là ma trận kết quảĐầu ra - 2
Nhập kích thước của ma trận:2Nhập ma trận thứ nhất:1 23 4Nhập ma trận thứ hai:2 01 2Nhập ma trận kết quả:4 55 5Đây không phải là ma trận kết quả