Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
211 KB
Nội dung
MỤC LỤC MỤC LỤC .1 CHƯƠNG 1: THUẬTTOÁN CHIA ĐỂTRỊ .2 (Divide to Conquer) 1.1/ Đặt vấn đề: 1.1.2) Sơ đồ chung: 1.2/ Thuật toán: 1.2.1) Ý tưởng: 1.2.2) Các bước giải: .3 1.2.3 Sơ đồ thuậttoán chia để trị: CHƯƠNG 2: ỨNGDỤNG CỦA THUẬTTOÁN CHIA ĐỂTRỊ GIẢI BÀITOÁNSẮPXẾP 2.1/ Phát biểu toán: c Đánhgiáthuật toán: .6 d Chương trình xếp dãy Mergesort: e Ví dụ toánxếp thực tế: .9 2.3.2 Quicksort .9 e Ví dụ toánxếp thực tế: 15 CHƯƠNG 1: THUẬTTOÁN CHIA ĐỂTRỊ (Divide to Conquer) 1.1/ Đặt vấn đề: Trong khoa học máy tính, chia đểtrị mô hình thiết kế thuậttoán quan trọng dựa đệ quy với nhiều phân nhánh Thuậttoán chia đểtrị hoạt động cách chia toán thành nhiều toán nhỏ thuộc thể loại, lặp lại nhiều lần, toán thu đủ đơn giản để giải trực tiếp Sau lời giải toán nhỏ tổng hợp lại thành lời giải cho toán ban đầu a Hình 1: Mô hình phương pháp chia đểtrị Tên gọi "chia để trị" áp dụng cho thuậttoán quy toán ban đầu toán nhỏ hơn, chẳng hạn xếpdanh sách theo thứ tự không tăng không giảm Những thuậttoán lập trình hiệu thuậttoán chia đểtrị thông thường: đặc biệt, thuậttoándùngđệ quy đuôi chuyển chúng thành vòng lặp thay đệ quy 1.1.1) Khái niệm: Chia đểtrị phương pháp thiết kế giải thuật bao gồm thao tác: Chia: Chia toán cần giải thành loạt toán độc lập Trị: Đòi hỏi việc giải toán thu Tổng hợp: Thực việc xây dựng lời giải toán đặt từ lời giải toán 1.1.2) Sơ đồ chung: Sơ đồ chung thuậttoán chia đểtrị (Divide and Conquer) gồm thành phần: - Chia (Divide): Chia toán cần giải S thành toán S1, S2, S3, - Trị (Conquer): Giải toán cách đệ quy - Tổng hợp (Combine): Tổng hợp lời giải toán S1, S2, S3, thành lời giải toán S Đểphântích độ phức tạp thuậttoán sử dụng công thứ đệ quy Vấn đề đặt cần giải toán độc lập cách nào? Đó vấn đề trung tâm toán 1.2/ Thuật toán: 1.2.1) Ý tưởng: Chia toán thành nhiều toán nhỏ thuộc thể loại, lặp lại nhiều lần, toán thu đủ đơn giản để giải trực tiếp Sau lời giải toán nhỏ tổng hợp lại thành lời giải cho toán ban đầu 1.2.2) Các bước giải: Giả sử có thuậttoán α để giải toán kích thước liệu vào n với thời gian bị chặn cn2 (c: số) Xét thuật giải β để giải toán cách: - Bước 1: Chia toán cần giải thành toán với kích thước n/2 - Bước 2: Giải toánthuậttoán α - Bước 3: Tổng hợp lời giải toánđể thu lời giải toánĐánhgiáthuật toán: Tính đắn thuậttoán β Giả sử bước đòi hỏi thời gian dn(d: số) Gọi: T α(n) = thời gian thuậttoán α T β(n) = thời gian thuậttoán β Ta có: T α(n) = cn2 (theo giả thuyết) T β(n) = 3.T α(n/2) + dn = ¾.cn2 + dn Nếu: dn < c n2/4 hay n > d/c thuậttoán β nhanh thuậttoán α Do 4.d/c số nên với n đủ lớn ta có n > d/c Điều cho thấy việc sử dụngthuậttoán β để giải toán đặt cách chia thành toán có kích thước ngày nhỏ đến thu toán kích thước n0 < 4.d/c thu hiệu cao 1.2.3 Sơ đồ thuậttoán chia để trị: procedure Divide_and_Conquer(n); { if n ≤ n0 then Giải toán cách trực tiếp; else { Chia toán thành r toán có kích thước n/k; for (mỗi toán r toán con) Divide_and_Conquer(n/k); Tổng hợp lời giải r toánđể thu lời giải toán; end; end; CHƯƠNG 2: ỨNGDỤNG CỦA THUẬTTOÁN CHIA ĐỂTRỊ GIẢI BÀITOÁNSẮPXẾP 2.1/ Phát biểu toán: Cho T[1 n] mảng n phần tử Vấn đề đặt xếpphần tử theo thứ tự dãy không tăng không giảm Đầu vào: T[1 n] mảng n phần tử Đầu ra: xếpphần tử theo thứ tự không giảm 2.2/ Phương pháp thiết kế: Áp dụngthuậttoán “chia để trị” để giải toánxếp 2.3/ Ứng dụng: Chúng ta giải vấn đề phương pháp selection sort hay insertion sort heapsort Như biết thời gian dùng selection sort hay insertion sort đểxếp mảng T hai trường hợp: xấu trung bình vào cỡ n Còn heapsort vào khoảng nlogn Có số giải thuật đặc biệt cho toán theo mô hình chia đểtrị mergesort quicksort, nghiên cứu hai giải thuật 2.3 Merge sort a Ý tưởng: Chia đểtrị tiếp cận tới toán việc tách mảng T thành hai phần mà kích thước chúng sai khác tốt, xếpphần cách gọi đệ qui sau trộn chúng lại (chú ý trì tính thứ tự) Để làm điều cần giải thuật hiệu cho việc trộn hai mảng U V thành mảng T mà kích thước mảng T tổng kích thước hai mảng U V Array Split Sub Array Sub Array Split SubArr ay Split SubArr ay SubArr ay Sort Sort Sort Sort Stored SubArra y Stored SubArra y SubArr ay Stored SubArra y Stored SubArra y Combine Combine Stored SubArray Stored SubArray Combine Store Array Hình vẽ 2: Quy trình xếp phương pháp chia đểtrị Vấn đề thực tốt ta thêm vào ô nhớ có sẵn cuối mảng U V giátrịđứng canh (giá trị lớn tất giátrị U V) b Giải thuật: Procedure merge(U[1 m+1],V[1 n+1],Ta[1 m+n]); (*Trộn mảng U[1 m+1] V[1 n+1] thành mảng T[1 m+n]); U[m+1],V[n+1] dùngđể chứa giátrị cầm canh*) { i:=1;j:=1; U[m+1]:= ∞ ; V[n+1]:= ∞ ; For (k=1;k