Tải bản đầy đủ (.pdf) (10 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (216.01 KB, 10 trang )

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

×