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