Tải bản đầy đủ (.pdf) (10 trang)

Bài giảng Cơ sở lập trình nâng cao - Chương 6: Phương pháp thiết kế thuật toán − chia để trị

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (62.08 KB, 10 trang )

<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-->

×