• Khi gặp ứng dụng cần số nguyên lớn hơn (hàng chục hay hàng trăm chữ số), chúng ta phải đi xây dựng cấu trúc dữ liệu số nguyên lớn Các thao tác đi kèm là: cộng trừ nhân lớn.. Mỗi đội th[r]
(1)CHIA ĐỂ TRN
CHIA ĐỂ TRN
DIVIDE AND CONQUER
Phạm Thế Bảo Khoa Toán – Tin học
Trường Đại học Khoa học Tự nhiên Tp.HCM
Nội dung
• Kỹ thuật quan trọng, áp dụng rộng rãi để
thiết kếcác giải thuật có hiệu thiết kếcác giải thuật có hiệu
• Để giải tốn kích thước n, ta chia tốn thành số tốn có kích thước nhỏ Giải toán tổng hợp kết quảlại để lời giải banđầu
• Những tốn chia thành tốn có kích thước nhỏ để
thành tốn có kích thước nhỏ để
(2)Một số bài toán tiêu biểu
• MergeSort QuickSort ố
• Nhân số nguyên lớn • Xếp lịch thi đấu thểthao • Bài tốn cân
• …
Phạm Thế Bảo
MergeSort QuickSort
• Chia tập liệu làm tập con, trình chia
đế hỉ ị 01 hầ tử Ỉ dừ (bài t
đến cịn 01 phần tử Ỉ dừng (bài toán sở), tổng hợp tập cách trộn có thứtự Ỉ tập liệu xếp
(3)Bài toán nhân hai số ngun lớn
• Trong ngơn ngữ lập trình, kiểu liệu số ngunđều có miền giá trịhạn chế
ngunđều có miền giá trịhạn chế,
ví dụ: Pascal, C sốnguyên từ -32768 đến 32767
• Khi gặp ứng dụng cần số nguyên lớn (hàng chục hay hàng trăm chữ số), phải xây dựng cấu trúc liệu số nguyên lớn Các thao tác kèm là: cộng trừ nhân lớn Các thao tác kèm là: cộng, trừ, nhân, … • Chúng ta xem xét cách nhân 02 số nguyên lớn
có n chữ số cho hiệu
Phạm Thế Bảo
• Nếu dùng cách nhân thông thường, nghĩa chữ số nhân với cộng lại chi phí O(n2).
• Áp dụng kỹp dụ g ỹ thuật chiat uật c a đểđể trị Ta chia 02 sốt ị a c a số nguyên X, Y thành số nguyên lớn có n/2 chữ số: X=A10n/2+B Y=C10n/2+D
Ví dụ: A=1234 A=12x102+34
Khi X.Y = AC10n+(AD+BC)10n/2+BD.
Giố h ê l i hi iế để ó
(4)• Theo cách làm phải thực phép nhân số nguyên lớn n/2 chữ số (AC, AD, BC, BD), sau dùng phép cộng số nguyên lớn n chữ số phép nhan với 10n và
ể ổ
10n /2để tổng hợp.
• Phép cộng số nguyên lớn cần O(n), phép nhân 10n có thể thực hiện đơn giản cách thêm
n chữ số Ỉ cần O(n) Gọi T(n) thời gian nhân hai số nguyên lớn ta có phương gian nhân hai số ngun lớn, ta có phương trình đệ quy:
Phạm Thế Bảo
• Giải phương trỡnh ta cú T(n) =
ặkhụng ci thin! ã Viết lại:
X Y AC10n+[(A B)(D C)+AC+BD]10n/2+BD
X.Y = AC10n+[(A-B)(D-C)+AC+BD]10n/2+BD
Cơng thức cần tính phép nhân số nguyên lớn n/2 chữ số: AC,BD (A-B)(D-C), phép cộng trừ phép nhân với 10n
Lập luận tương tựập ậ g ự ta có phương trìnhp g đệệquy:q y T(1)=1
T(n)=
(5)Nghiệm phương trình T(n)=
Ỉcải thiện Thuật giải thơ:
longDigit multi2Integer(longDigit X, longDogit Y, int n){
if( 1) th t X*Y
if(n=1) then return X*Y; A=left(X,n/2);
B=right(X,n/2); C=left(Y,n/2); D=right(Y,n/2);
m1=multi2Integer(A,C,n/2);
2 lti2I t (A B D C /2)
m2=multi2Integer(A-B,D-C,n/2); m3=multi2Integer(B,D,n/2);
return (m1*10n+(m1+m2+m3)*10n/2+m3);
}
Phạm Thế Bảo
Xếp lịch thi đấu thể thao
• Xét việc xếp lịch thi đấu vòng tròn lượt cho n đội đá banh Mỗi đội thi đấu với cho n đội đá banh Mỗi đội thi đấu với nhau, đội đấu nhiều trận ngày Làm ta xếp lịch thi đấu cho số ngày • Ta có tổng số trậnđấu tồn giải
nếu n chẵn ta n/2 cặp thi đấu
ộ Ỉ ầ í hấ ( 1) Nế
(6)• Lịch thi đấu bảng n dòng n-1 cột
đánh số tứ trở đi, dòng iđại diện chođội thứi cột j
đại diện cho ngày thi đấu j, ô(i,j) ghi đội phải thi đấu vớiđội i ngày j
• Dùng chiến lược chia để trị: để lịch cho n đội, ta cho n/2 đội, để lịch cho n/2 đội ta lịch cho
ắ ấ
p ộ , p ị ộ p ị
n/4 đội, … Ỉ lịch thi đấu cho đội (bài toán
sở)
• Từ lịch thiđấu đội, lịch thi đấu cho 4đội nhưsau:
– Lịch thiđấu cho 4đội bảng dòng cột
– Lịch thiđấu cho 2đội ngày lịch thi
đấu đội (bài tốn sở) Vậy ơ(1 1)=2 ô(2 1)=1
đấu đội (bài toán sở) Vậy ơ(1,1)=2, ơ(2,1)=1 Tương tự có lịch thiđấu cho đội ngày 1: ô(3,1)=4 ơ(4,1)=3 Ta thấy ơ(3,1)=ơ(1,1)+2 ơ(4,1)=ơ(2,1)+2
– Lịch thiđấu 4đội, ta lấy góc bên trái bảng lắp vào cho góc bên phải lấy góc bên trái lắp cho góc bên phải Phạm Thế Bảo
Ngày 1 Đội
Đội
Ngày Ngày 2 Ngày 3 Đội
Đội
Đội
Đội
Ngày Ngày 2 Ngày 3
Đội
Đội
Đội
Đội
Ngày Ngày 2 Ngày 3
Đội
(7)Ngày Ngày Ngày Ngày Ngày Ngày 6 Ngày 7
Đội
Đội
Ngày Ngày Ngày Ngày Ngày Ngày 6 Ngày 7
Đội
Đội
Ngày Ngày Ngày Ngày Ngày Ngày 6 Ngày 7
Đội
ĐĐộội 2i 11 44 33
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Đội
Phạm Thế Bảo
Đội
Đội
Đội
Bài tập: càiđặt chương trình
Bài tốn cân bằng
• Với kỹ thuật chia để trị, toán ban đầu
đ h t ó kí h th ầ
được thành toán có kích thước gần hiểu suất cao