Phân tích thuật toán chia để trị

7 481 2
Phân tích thuật toán  chia để trị

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

Thông tin tài liệu

Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin

14/04/2008 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, đượcápdụng rộng rãi để thiết kế các giải thuật có hiệu quả . thiết kế các giải thuật có hiệu quả . • Để giải quyếtmột bài toán kích thướcn,tachia bài toán này thành mộtsố bài toán con có kích thướcnhỏ hơn. Giải các bài toán con này rồitổng hợpkếtquả lại để đượclờigiảibanđầu. • Những bài toán con này cũng có thểđược chia thành các bài toán có kích thước nhỏ hơn nữa để thành các bài toán có kích thước nhỏ hơn nữa để giải quyết. Quá trình này sẽđưa đếnnhững bài toán mà lờigiảilàhiển nhiên hay dễ dàng thực hiện. Ta gọinhững bài toán này là bài toán cơ sở. Phạm Thế Bảo 14/04/2008 2 Mộtsố bài toán tiêu biểu • MergeSort và QuickSort ố • Nhân s ố nguyên lớn • Xếplịch thi đấuthể thao • Bài toán con cân bằng • … Phạm Thế Bảo MergeSort và QuickSort • Chia tậpdữ liệulàm2tập con, quá trình chia đế khi hỉ ò 01 hầ tử Æ dừ ( bài tá đế n khi c hỉ c ò n 01 p hầ n tử Æ dừ ng ( bài t o á n cơ sở), tổng hợp2tập con bằng cách trộncó thứ tự Æ tậpdữ liệu đượcsắpxếp. • Giống MergeSort nhưng cầnphầntử cầm canh đứng giữa để chia thành 2 tập con : một tập sẽ đứng giữa để chia thành 2 tập con : một tập sẽ có các phầntử có giá trị nhỏ hơn hay bằng, tập còn lạisẽ có các phầntử có giá trị lớnhơn. Phạm Thế Bảo 14/04/2008 3 Bài toán nhân hai số nguyên lớn • Trong các ngôn ngữ lậptrình,kiểudữ liệusố nguyên đều có miền giá trị hạn chế nguyên đề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ầnsố nguyên lớnhơn (hàng chục hay hàng trămchữ số), chúng ta phải đixâydựng cấutrúcdữ liệusố nguyên lớn Các thao tác đi kèm là : cộng trừ nhân lớn . Các thao tác đi 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ố sao cho hiệuquả. Phạm Thế Bảo • Nếuchúngtadùngcáchnhânthôngthường, nghĩalàtừng chữ số nhân với nhau rồicộng lại thì chi phí là O(n 2 ). • Á p dụ n g k ỹ t h uật c hi a để t r ị . T a c hi a 0 2 số p dụ g ỹ tuật ca để t ị . a ca 0 số nguyên X, Y thành các số nguyên lớncón/2 chữ số:X=A10 n/2 +B và Y=C10 n/2 +D Ví dụ: A=1234 thì A=12x10 2 +34 Khi đóX.Y=AC10 n +(AD+BC)10 n/2 +BD. Giố h ê l i hi iế để ó bài Giố ng n hư tr ê nta l ạ i c hi at iế ptục để c ó bài toán cơ sở dễ dàng thựchiện. Phạm Thế Bảo 14/04/2008 4 • Theo cách làm trên thì phảithựchiện4phép nhân các số nguyên lớnn/2chữ số (AC, AD, BC, BD), sau đódùng3phépcộng các số nguyên lớnnchữ số và2phépnhanvới10 n và ể ổ 10 n/2 đ ể t ổ ng hợp. • Phép cộng số nguyên lớncần O(n), phép nhân 10 n có thể thựchiện đơngiảnbằng cách thêm nchữ số 0 Æ cũng cần O(n). GọiT(n)làthời gian nhân hai số nguyên lớn ta có phương gian nhân hai số nguyên lớn , ta có phương trình đệ quy: Phạm Thế Bảo • Giảiphương trình ta có T(n) = Æ không cảithiện! • Viếtlại: XY AC10 n +[(A B)(D C)+AC+BD]10 n/2 +BD X . Y = AC10 n +[(A - B)(D - C)+AC+BD]10 n/2 +BD Công thức này chỉ cần tính 3 phép nhân của các số nguyên lớnn/2 chữ số: AC,BD và (A-B)(D- C), 6 phép cộng trừ và 2 phép nhân với10 n . L ập lu ậ ntươn g t ự ta có p hươn g trình đ ệ q u y : ập ậ g ự p g ệ qy T(1)=1 T(n)= Phạm Thế Bảo Nghiệm? 14/04/2008 5 Nghiệmcủaphương trình T(n)= Æ cảithiệnhơn. Thuậtgiải thô: longDigit multi2Integer(longDigit X, longDogit Y, int n){ if( 1) th t X*Y if( n= 1) th en re t urn 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 BD C /2) m 2 =mu lti2I n t eger (A - B , D - C ,n /2) ; m3=multi2Integer(B,D,n/2); return (m1*10 n +(m1+m2+m3)*10 n/2 +m3); } Phạm Thế Bảo Xếplịch thi đấuthể thao • Xét việcxếplịch thi đấu vòng tròn mộtlượt cho n đội đá banh Mỗi đội thi đấu với nhau cho n đội đá banh . Mỗi đội thi đấu với nhau , mỗi độichỉđấunhiềunhấtmộttrậnmộtngày. Làm sao ta xếplịch thi đấuchosố ngày ít nhất. • Ta có tổng số trận đấucủatoàngiảilà nếunchẵn thì ta có thể sắpn/2cặpthiđấu ộ à Æ ầ í hấ ( 1 ) à Nế trong m ộ tng à y Æ c ầ n í tn hấ t ( n- 1 ) ng à y. Nếu nlẻ thìtacóthể sắp (n-1)/2 cặpthiđấutrong một ngày Æ cầnítnhất n ngày Phạm Thế Bảo 14/04/2008 6 • Lịch thi đấulàmộtbảng n dòng và n-1 cộtvàđược đánh số tứ 1trởđi, dòng i đạidiệnchođộithứ ivàcộtj đạidiện cho ngày thi đấu j, ô(i,j) ghi độiphải thi đấu với đội i trong ngày j. • Dùng chiếnlượcchiađể trị: để sắplịch cho n đội, ta sắ p cho n / 2 đ ộ i , để sắ p l ị ch cho n / 2 đ ộ itasắ p l ị ch cho ắ ấ p ộ , p ị ộ p ị n / 4 đội, … Æ s ắ plịch thi đ ấ ucho2đội( b ài toán cơ sở). • Từ lịch thi đấucủa2đội, chúng ta sắplịch thi đấucho 4 độinhư sau: – Lịch thi đấu cho 4 độilàmộtbảng 4 dòng 3 cột. – Lịch thi đấu cho 2 đội 1 và 2 trong ngày 1 chính là lịch thi đấu của 2 đội ( bài toán cơ sở ) Vậy ô( 1 1 )= 2 ô( 2 1 )= 1 đấu của 2 đội ( bài toán cơ sở ) . Vậy ô( 1 , 1 )= 2 , ô( 2 , 1 )= 1 . Tương tự cũng có lịch thi đấu cho 2 đội 3 và 4 trong ngày 1: ô(3,1)=4 và ô(4,1)=3. Ta có thể thấy ô(3,1)=ô(1,1)+2 và ô(4,1)=ô(2,1)+2. – Lịch thi đấucủa4đội, ta lấygóctrênbêntráicủabảng lắp vào cho góc dướibênphảivàlấy góc dưới bên trái lắpcho góc trên bên phải. Phạm Thế Bảo Ngày 1 Đội1 2 Đội2 1 Ngày 1 Ngày 2 Ngày 3 Đội1 2 Đội2 1 Đội3 4 Đội4 3 Ngày 1 Ngày 2 Ngày 3 Đội1 24 Đội2 13 Đội3 42 Đội4 31 Phạm Thế Bảo Ngày 1 Ngày 2 Ngày 3 Đội1 234 Đội2 143 Đội3 412 Đội4 321 14/04/2008 7 Ngày 1 Ngày 2 Ngày 3 Ngày 4 Ngày 5 Ngày 6 Ngày 7 Đội1 234 Đ ộ i 2 1 4 3 Ngày 1 Ngày 2 Ngày 3 Ngày 4 Ngày 5 Ngày 6 Ngày 7 Đội1 234 67 8 Đ ộ i 2 1 4 3 5 8 7 Ngày 1 Ngày 2 Ngày 3 Ngày 4 Ngày 5 Ngày 6 Ngày 7 Đội1 234567 8 Đ ộ i 2 1 4 3 6 5 8 7 Đ ộ i 2 1 4 3 Đội3 412 Đội4 321 Đội5 678 Đội6 587 Đội7 856 Đ ộ i 8 7 6 5 Đ ộ i 2 1 4 3 5 8 7 Đội3 412 85 6 Đội4 321 76 5 Đội5 678 23 4 Đội6 587 14 3 Đội7 856 41 2 Đ ộ i 8 7 6 5 3 2 1 Đ ộ i 2 1 4 3 6 5 8 7 Đội3 412785 6 Đội4 321876 5 Đội5 678123 4 Đội6 587214 3 Đội7 856341 2 Đ ộ i 8 7 6 5 4 3 2 1 Phạm Thế Bảo Đ ộ i 8 7 6 5 Đ ộ i 8 7 6 5 3 2 1 Đ ộ i 8 7 6 5 4 3 2 1 Bài tập: cài đặtchương trình Bài toán con cân bằng • Vớikỹ thuậtchiađể trị,nếu bài toán ban đầu đ thà h á bài tá ó kí h th ớ ầ đ ược thà n h c á c bài t o á nconc ó kí c h th ư ớ cg ầ n bằng nhau thì hiểusuấtsẽ cao hơn. • Ví dụ:MergeSortchialàm2tậpconbằng nhau (n/2 phầntử -cóthể sai khác 1) thì độ phức tạp là O . Đối với QuickSort , nếu phức tạp là O . Đối với QuickSort , nếu phân hoạch không tốtthìđộ phứctạpvẫnlà O(n 2 ), trường hợpxấunhất. Phạm Thế Bảo . để thiết kế các giải thuật có hiệu quả . thiết kế các giải thuật có hiệu quả . • Để giải quyếtmột bài toán kích thướcn,tachia bài toán này thành mộtsố bài toán con có kích thướcnhỏ hơn. Giải các bài toán con. 14/04/2008 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, đượcápdụng rộng rãi để thiết kế các giải thuật có hiệu quả . thiết kế các giải thuật có hiệu quả . •. rồitổng hợpkếtquả lại để đượclờigiảibanđầu. • Những bài toán con này cũng có thểđược chia thành các bài toán có kích thước nhỏ hơn nữa để thành các bài toán có kích thước nhỏ hơn nữa để giải quyết.

Ngày đăng: 23/10/2014, 21:06

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan