quá trình phân chia sẽ cùng dạng với bài toán ban đầu, chỉ khác nhau về kích thước. – Có thể có một số bài toán con không cùng[r]
(1)CƠ SỞ LẬP TRÌNH NÂNG CAO
Biên soạn: Ths.Tôn Quang Toại TonQuangToai@yahoo.com
TPHCM, NĂM 2013
(2)PHƯƠNG PHÁP THIẾT KẾ THUẬT TOÁN
− CHIA ĐỂ TRỊ −
(3)Nội dung
• Giới thiệu
(4)(5)Giới thiệu
• Chia để trị phương pháp thiết kế thuật
toán từ xuống (top – down) với ý tưởng:
– Chia toán lớn thành tốn nhỏ
hơn có dạng giống toán ban đầu
– Các toán nhỏ chia thành
bài toán nhỏ nữavới hy vọng
(6)Phương pháp
• Phương pháp Chia để trị gồm bước:
– Bước [Divide] – Chia toán thành
phần
– Bước [Solve] – Giải phần
– Bước [Combine] – Kết hợp lời giải
(7)Phương pháp
• Nhận xét quan trọng:
– Các toán (các phần) nhận
quá trình phân chia dạng với tốn ban đầu, khác kích thước
– Có thể có số tốn khơng
dạng với tốn lớn
(8)Sơ đồ cài đặt
• Cài đặt phương pháp Đệ qui
void DivideConquer(A, x)
{
if (A du nho) Solve(A)
else
{
- Phan chia A A0, A1, …, An-1
- for (i=0; i<n; i++)
DivideConquer(Ai, xi)
- Ket hop cac nghiem xi de duoc nghiem x }
(9)Các ví dụ
• Ví dụ [Sorting 1]: Cho dãy a1, a2, …,
an Hãy xây dựng thuật toán xếp dãy tăng dần
…
n-1 Phần tử cuối
(10)Các ví dụ
– Bước 2: Solve
Sorted