Cấu trúc dữ liệu và giải thuật (phần 10) pot

10 664 2
Cấu trúc dữ liệu và giải thuật (phần 10) pot

Đang tải... (xem toàn văn)

Thông tin tài liệu

NHÂN MA TR NHÂN MA TR Ậ Ậ N N Ph Ph é é p to p to á á n trên ma tr n trên ma tr ậ ậ n n  Cộng, trừ ma trận: - 2 ma trận chỉ có thể cộng hoặc trừ cho nhau nếu chúng có cùng kích thước. Nhân ma trận: - Có thể nhân 2 ma trận với nhau nếu số cột của ma trận 1 = số hàng của ma trận 2  Kết quả sẽ là ma trận có số hàng của ma trận 1 và cột ma trận 2 - Ví dụ: Nhân 2 ma trận có kích thước 3x4 và 4x7  được ma trận có kích thước 3x7 Nhân ma tr Nhân ma tr ậ ậ n n  Tính chất của nhân ma trận: - Nhân ma trận không có tính giao hoán - Ví dụ: Cho 2 ma trận vuông A và B  Kết quả A*B # B*A Ví dụ: Cho 2 ma trận 2x3 * 3x4  Kết quả ma trận (2x4) Nhân ma tr Nhân ma tr ậ ậ n n  Thuật toán: Nhân 2 ma trận G(n x n) và H(n x n)  Kết quả R(n x n) for (int i =1;i<n;i++) for (int j=1;j<n;j++) R i,j = 0; for (int k=1;k<n;k++) R i,j =R i,j +G i,k *H k,j ; Đánh giá thuật toán: - Số phép cộng: n 3 - Số phép nhân: n 3  O(n 3 ) Thu Thu ậ ậ t to t to á á n Strassen n Strassen - Thuật toán Strassen ứng dụng với ma trận vuông - Thuật toán Strassen áp dụng giải thuật chia để trị - Chia nhỏ ma trận A, B thành những ma trận con A 0 ,A 1 ,… A × ×× × B = R A 0 A 1 A 2 A 3 × ×× × B 0 B 1 B 2 B 3 = A 0 × ×× ×B 0 +A 1 × ×× ×B 2 A 0 × ×× ×B 1 +A 1 × ×× ×B 3 A 2 × ×× ×B 0 +A 3 × ×× ×B 2 A 2 × ×× ×B 1 +A 3 × ×× ×B 3 Thu Thu ậ ậ t to t to á á n Strassen n Strassen P 1 = (A 11 + A 22 )(B 11 +B 22 ) P 2 = (A 21 + A 22 ) * B 11 P 3 = A 11 * (B 12 - B 22 ) P 4 = A 22 * (B 21 - B 11 ) P 5 = (A 11 + A 12 ) * B 22 P 6 = (A 21 - A 11 ) * (B 11 + B 12 ) P 7 = (A 12 - A 22 ) * (B 21 + B 22 ) C 11 = P 1 + P 4 - P 5 + P 7 C 12 = P 3 + P 5 C 21 = P 2 + P 4 C 22 = P 1 + P 3 - P 2 + P 6 Thu Thu ậ ậ t to t to á á n Strassen n Strassen  Cài đặt: void matmul(int *A, int *B, int *R, int n) { if (n == 1) { (*R) += (*A) * (*B); } else { matmul(A, B, R, n/4); matmul(A, B+(n/4), R+(n/4), n/4); matmul(A+2*(n/4), B, R+2*(n/4), n/4); matmul(A+2*(n/4), B+(n/4), R+3*(n/4), n/4); matmul(A+(n/4), B+2*(n/4), R, n/4); matmul(A+(n/4), B+3*(n/4), R+(n/4), n/4); matmul(A+3*(n/4), B+2*(n/4), R+2*(n/4), n/4); matmul(A+3 * (n/4), B+3*(n/4), R+3*(n/4), n/4); } } Thu Thu ậ ậ t to t to á á n Strassen n Strassen  Đánh giá giải thuật: - Thuật toán Strassen có độ phức tạp O(n log7 ) = O(n 2,81 ) PHƯƠNG TRÌNH PHƯƠNG TRÌNH TUY TUY Ế Ế N T N T Í Í NH NH Phương tr Phương tr ì ì nh tuy nh tuy ế ế n t n t í í nh nh Tìm giá trị (x 1 ,…,x n )  Ví dụ: . giá thuật toán: - Số phép cộng: n 3 - Số phép nhân: n 3  O(n 3 ) Thu Thu ậ ậ t to t to á á n Strassen n Strassen - Thuật toán Strassen ứng dụng với ma trận vuông - Thuật toán Strassen áp dụng giải. Cho 2 ma trận vuông A và B  Kết quả A*B # B*A Ví dụ: Cho 2 ma trận 2x3 * 3x4  Kết quả ma trận (2x4) Nhân ma tr Nhân ma tr ậ ậ n n  Thuật toán: Nhân 2 ma trận G(n x n) và H(n x n)  Kết quả. B+3*(n/4), R+3*(n/4), n/4); } } Thu Thu ậ ậ t to t to á á n Strassen n Strassen  Đánh giá giải thuật: - Thuật toán Strassen có độ phức tạp O(n log7 ) = O(n 2,81 ) PHƯƠNG TRÌNH PHƯƠNG TRÌNH TUY TUY Ế Ế N

Ngày đăng: 09/07/2014, 21:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan