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ụ: