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 (1.05 MB, 74 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
- C lượ : lượ a lượ ay l lượ ộ lượ am lam
- K ả ộ p p .
<b>Nội dung chi tiết của học phần </b>
<b>TÊN CHƯƠNG ỤC <sup>PHÂN PHỐI SỐ TIẾT </sup>TS LT TH/Xemina BT KT </b>
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4"><b>Nhiệm vụ của sinh viên </b>
T am ự y ủa ê ự ọ ự l m p do giáo viên giao,
- <i>R a Neap l a Kumarss Naimipour, Foundations of Algorithms Using </i>
<i>C++ Pseudocode, Third Edition, Jones and Bartlett Publishers, 2004. </i>
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein,
<i>Introduction to Algorithms, Second Edition, MIT Press, 2001. </i>
<b>H nh thức và tiêu chuẩn đánh giá sinh viên </b>
<b>Ngày phê duyệt / /20 </b>
<b>Tr ởng ộ môn ThS Nguyễn Hữu Tuân (ký và ghi rõ họ tên) </b>
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">TÀI LI U THAM KHẢO ... 65
ĐỀ THI THAM KHẢO ... 66
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">2
<b>CHƯƠNG I C C H I NIỆ CƠ ẢN 1. Thuật toán (giải thuật) - Algorithm </b>
<b>2. i u diễn thuật tốn </b>
T ư ng có hai cách bi u di n một thu t toán, cách th nh t là mô tả ước thực hi n của thu t toán, cách th hai là s dụ s ồ giải thu t.
<b>2.1. ô tả các ớc thực hiện </b>
Đ bi u di n thu ư i ta mô tả x ước thực hi n của thu t tốn, ngơn ng ù mô tả thu t tốn có th là ngôn ng tự nhiên ho c một ngôn ng lai ghép gi a ngôn ng tự nhiên với một ngôn ng l p ọ l n giả mã l nh.
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">3
<b>Ví dụ: mô tả thu m ước số chung lớn nh t của hai số nguyên. </b>
Input: Hai số nguyên a, b.
O p : ớ số lớ ủa a .
<b>Thuật toán: </b>
Bướ 1: N a USCLN(a, b)=a.
Bướ : N a m USCLN của a-b và b, quay l i ướ 1 Bướ 3: N u a < b thì tìm USCLN của a và b-a, quay l i ướ 1
<b>2 2 Sử dụng s đ ( u đ ) giải thuật (flowchart) </b>
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">4
<b> hối C l p x l . </b>
<b>3. Độ phức tạp thuật toán – Algorithm Complexity 3 1 Các tiêu chí đánh giá thuật toán </b> thu t tốn càng hi u quả thì càng khó hi t càng ph c t p l i càng hi u quả (không phả l . V nh giá và so sánh các thu ư a ư ng dựa ê ộ ph c t p v th i gian thực hi n của thu t toán, gọ l ộ ph c t p thu t toán
<b>(algorithm complexity). V bản ch ộ ph c t p thu t toán là mộ m ướ lượng (có th </b>
khơng chính xác) số phép tính mà thu t tốn cần thực hi n (t dàng suy ra th i gian thực hi n của thu ối với một bộ d li p ước N. N có th là số phần t của mả ư ng hợp bài toán sắp x p ho c tìm ki m, ho c có th l ộ lớn của số trong bài toán ki m tra số nguyên tố chẳng h n.
<b>3.2. Đánh giá th i gian thực hiện thuật toán </b>
Đ minh họa vi ộ ph c t p thu t tốn ta xem xét ví dụ v thu t toán sắp x p
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">5 }
Số phép tính thu t tốn cần thực hi n ượ ư sau: (N-1) + (N- + + + 1 N* N-1)/2.
Phân tích chi ti N* N-1)/2 là số phép toán so sánh cần thực hi n, còn số lần thực hi i ch hai phần t (số nguyên) tố a ủa thu t toán là N.
C t của thu t toán sắp x p i ch trực ti p:
Tư ự ối với thu t toán sắp x p chọn ta có số p p ự l : (N-1) + (N-2) + + +1 N* N-1)/2. Chi ti N* N-1)/2 là số lần so sánh thu t toán thực hi n, và l số lần i ch hai phần t (hai số nguyên) tố a ủa thu t toán.
T ư ng hợp trung bình, thu t tốn sắp x p chọ x ướng tố s ới sắp x p i ch trực ti p vì số a i ch ư ng hợp tốt nh ư a ư ng hợp tồi nh t thì chắc chắn thu n sắp x p chọn tố k t lu n thu t toán sắp x p chọ a s ới thu t toán sắp x p i ch trực ti p.
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12"><i><b> “ ộ p p a ủa l O(N</b></i><sup>2</sup><i><b> ắ ọ l “ l O(N</b></i><sup>2</sup> . Tư ự a a <b><sub> (omega)v (theta): </sub></b>
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">9
<i><b>N a l O(N</b></i><sup>2</sup> a ẫ ư l
<i><b> l O N a ưa a ượ ô x . </b></i>
<b>4. Cấu tr c dữ iệu – Data structure </b>
Niklaus Wirth, một l p trình viên và nhà khoa họ m y ư i phát minh ra ngôn ng l p Pas al ng nói một câu nói n i ti l ực l p : C ư (Programs) = C u trúc d li u (Data Structures) + Giải thu t (Algorithms). Câu nói này nói lên bản ch t của vi c l p l m một c u trúc d li u phù hợp bi u di n d li u của bài toán và t x y ựng giải thu t phù hợp với c u trúc d li chọn. Ngày nay với sự phát tri n của các k thu t l p trình, câu nói của Wirth không hẳ y ối n a ư ẫn phản ánh sự gắn k t và tầm quan trọng của các c u trúc d li u và giải thu t. C u trúc d li ược s dụ bi u di n d li u còn các giải thu ược s dụ thực hi n các thao tác trên các d li u của bài toán nh m hoàn thành các ch ă ủa ư
<b>5.2. Đệ qui quay ui – Backtracking </b>
C lượ ay l l mộ lượ x y ự ựa ê a qui. N m ủa ượ mô a ướ mộ e m p ầ ủa e
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16"><b> Chiến c tham am (Greedy) </b> C lượ am lam l mộ lượ x y ự m m ố ư ụ ộ
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">s l ả ựa ê s p lems ựa ê a . C qui ộ ư s ụ mả lư l m ủa
yê ựa ủa ma sa le p ư l p ầ ê p ầ lớ ê ộ ủa ma . C ẳ a 0 l mộ p ầ yê ựa ma sa :
f(x) = a<small>0</small> + x*(a<small>1</small>+x*(a<small>2</small>+x* .+x a<small>n-1</small>+a<small>n</small>*x Cô H e .
<b> ài tập C 4 ộp ướ a m m ủa ộp ượ ô 1 </b>
4 m xa m . H y ưa a ả x p ộp 1 y sa e p a ê x ố ướ sa ủa y ủ ả 4 m xa m .
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">12
<b> ài tập 7 H y ư a ượ a ả số yê </b>
số a số.
<b> ài tập 8 p ụ s a ả số yê ố N. </b>
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">13
<b>CHƯƠNG II: S P XẾP (S RTING) VÀ T IẾ (SE RCHING) 1. Bài toán s p ếp </b>
<b>1 1 S p ếp trong (Interna Sorting) </b>
Sắp x p ược xem là một trong nh l ực nghiên c u c n của khoa học máy . T ướ t toán chi ti t chúng ta cần nắm v ng một số khái ni m ản
Sắp x p (sorting) là một quá trình x p t các bản ghi của một file theo một th tự nào . V c x p y ược thực hi n dựa trên một hay nhi ư ô y ược gọi là khóa xắp x p (key). Th tự của các bả ượ x nh dựa trên các khóa khác nhau và vi c sắp x p ố ược thực hi ối với m i khóa theo các th tự khác nhau. Chúng ta s t p trung vào các thu t toán xắp x p và giả s khóa ch gồm 1 ư ng duy nh t. Hầu h t các thu t toán xắp x p ược gọi là các thu t toán xắp x p so sánh: chúng s dụng hai
Khi các bả ước lớn vi i các bản ghi là r t tố m giảm p ư i ta có th s dụ p ư p p sắp x p gián ti p. Vi c này có th ược thực hi n theo nhi u cách khác nhau và môt trong nh p ư p p l o ra một file mới ch a ư ng khóa của le a ầu, ho c con tr tới ho c là ch số của các bản ghi ban ầu. Chúng ta s sắp x p trên file mới này với các bả ước nh sa y c p vào các bả le a ầu thông qua các con tr ho c ch số y l l m ư ng th y ối với các h quản tr s d li u).
</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">14 Ví dụ: chúng ta muốn sắp x p các bản ghi của le sa y:
<b>Index Dept Last First Age ID number </b>
Sau khi sắp x p x truy c p vào các bản ghi theo th tự sắp x p chúng ta s dụng th tự ược cung c p b i cột index (ch số . T ư ng hợp này là 3, 2, 4, 1. (chúng ta không nh t thi t phả i các bả a ầu).
<b>1.3 Các tiêu chuẩn đánh giá một thuật toán s p ếp </b>
Các thu t tốn sắp x p có th ược so sánh với nhau dựa trên các y u tố sa y:
+ Th i gian thực hi n (run-time): số các thao tác thực hi ư ng là số các phép so s i các bản ghi).
+ Bộ nhớ s dụ Mem y : l lượng bộ nhớ cần thi thực hi n thu t toán lượng bộ nhớ s dụ ch a d li u cần sắp x p.
+ Một vài thu t toán thuộc lo “ pla e ô ần (ho c cần một số cố nh) thêm bộ nhớ cho vi c thực hi n thu t toán.
+ Các thu ư ng s dụng thêm bộ nhớ t l thu n theo hàm tuy n tính ho c m m ớ ước file sắp x p.
+ T t nhiên là bộ nhớ s dụng càng nh càng tốt m c dù vi ối gi a th i gian và bộ nhớ cần thi t có th là có lợi.
+ Sự nh (Stability):Một thu ược gọi là nh n ư gi ược quan h th tự của các khóa b a ô l m ay i th tự của các khóa b ng nhau).
C a ư ng lo lắng nhi u nh t là v th i gian thực hi n của thu t tốn vì các thu t toán mà chúng ta bàn v ư ng s dụ ước bộ nhớ ư ư a .
Ví dụ v sắp x p nh: Chúng ta muốn sắp x p le sa y ự trên ký tự ầu của các bả ướ y l t quả sắp x p của các thu t toán nh và không nh:
</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">Đ n mã sau minh họa cho thu t toán: void selection_sort(int a[], int n) {
int i, j, vtmin;
</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">Với m i giá tr của i thu t toán thực hi n (n – i – 1) phép so sánh và vì i ch y t 0 cho tới
<i><b>(n–2), thu t toán s cần (n-1) + (n- + + 1 -1)/2 t c là O(n</b></i><sup>2</sup>) phép so sánh. T mọ
</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">T ựa a l hèn m i khóa vào mộ y ược sắp x p của dãy cần sắp. P ư p p y ư ược s dụng trong vi c sắp x p các cây bài trong .
S ồ ả ủa ư sa :
</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">Với m i i chúng ta cần thực hi n so sánh khóa hiên t i (a[i]) với nhi u nh t là i khóa và vì i ch y t 1 tới n-1 nên chúng ta phải thực hi n nhi u nh : 1 + + + -1 = n(n-1)/2 t c
<i><b>là O(n</b></i><sup>2</sup> p p s s ư ự ư t toán sắp x p chọn. Tuy nhiên l p le ô
</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">l mộ y p ầy ủ l mộ y p ầy ả ầ ủa y ầ ố ù ầy p a ủa y . C mô ả l mộ y p m
</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">Heaps ọ ớ l eap 1 lầ -1 lầ ọ ớ eap y s y a ộ p p ủa l O(n + (n-1)logn) = O(n*log n).
T ê ự eaps ô a quicksort.
</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">ô a m m ượ lư ê ộ ớ ủa m y m m.
<b>K ả m m l v trí của phần tử th a mãn điều kiện t m kiếm: ư a </b>
</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">34
<b>CHƯƠNG III ĐỆ QUI VÀ CHIẾN LƯ C V T CẠN 1. hái niệm đệ qui </b>
</div><span class="text_page_counter">Trang 41</span><div class="page_container" data-page="41">35 ê số ư ợp ầ p ả ủa ư lê ớ số lớ ư l s ớ yê ầ ủa a.
<b>3. Chiến c quay ui ( ack tracking / try and error) </b>
<b> Đ y l mộ lượ a ọ ủa . Tư </b>
ự ư lượ s lượ ay l mộ m : lư ả ă p ượ ướ p l ầ lù l mộ ướ l ả ă ưa ượ . T ô ư ả y ư ượ ắ l ớ
</div><span class="text_page_counter">Trang 44</span><div class="page_container" data-page="44">38
<b>CHƯƠNG IV CHIẾN LƯ C CHI Đ TR </b>
<b>1. C sở của chiến c chia đ tr (Divide and Conquer) </b>
</div><span class="text_page_counter">Trang 45</span><div class="page_container" data-page="45">39 Các thu t toán sắp x p tốt nh u là các thu . C u tuân theo chi n lượ sa y:
Cho một danh sách các bản ghi L.
+ N u L có khơng nhi 1 p ần t a l ược sắp + N ược l i
- Chia L thành hai dãy nh l L1 L - Sắp x p L1 L qui – gọi tới thủ tục này)
int mid = (left + right)/2; mergesort(A, left, mid); mergesort(A, mid+1, right); merge(a, left, mid, right);
</div><span class="text_page_counter">Trang 46</span><div class="page_container" data-page="46">int *B1 = new int[m-l+1]; int *B2 = new int[r-m]; for(int i=0;i<m-l+1;i++)
</div><span class="text_page_counter">Trang 47</span><div class="page_container" data-page="47">int *B=new int[r-l+1]; for (i=m; i>=l; i--)
</div><span class="text_page_counter">Trang 49</span><div class="page_container" data-page="49"><b>3. S p ếp nhanh (Quick sort) </b>
s l sắp x p ượ C. A. R. H a e ưa a ăm 19 .
</div><span class="text_page_counter">Trang 53</span><div class="page_container" data-page="53">47
<b>Cài đ t ng C của thuật toán t m kiếm nh phân </b>
int binary_search(int a[], int left, int right, int key)
</div><span class="text_page_counter">Trang 57</span><div class="page_container" data-page="57">51
<i>+ ui ho ch động là một thuật t nh toán đệ ui hiệu uả ng cách lưu trữ các t uả c c ộ </i>
<i>+ rong ui ho ch động t uả c các ài toán con thư ng đư c lưu vào một mảng </i>
<b>3. Bài toán 2 ài toán nhân dãy các ma trận </b>
</div><span class="text_page_counter">Trang 59</span><div class="page_container" data-page="59"><i>1. ác đ nh đ c đi m cấu trúc c giải pháp tối ưu c ài toán </i>
<i>2. ìm c ng th c tru h i đệ ui ác đ nh giá tr c một giải pháp tối ưu </i>
<i>3. nh giá tr tối ưu c ài toán d vào các giá tr tối ưu c các ài toán con c </i>
</div><span class="text_page_counter">Trang 63</span><div class="page_container" data-page="63">ộ l p y ượ lê l mộ ả . T a ủa m ộ ượ x a số yê s ư ớ a ắ ầ ướ
</div><span class="text_page_counter">Trang 66</span><div class="page_container" data-page="66"><b>Thực hiện ựa chọn theo ki u tham am (Greedy Choice) </b>
M ầ y xem s ọ lựa ọ a s ọ lựa ọ ố
</div><span class="text_page_counter">Trang 68</span><div class="page_container" data-page="68"><b>Thực hiện một ựa chọn tham am </b>
<b> ổ đề 1: Tồ mộ l ọ a ố ư p S</b><sub>i,j</sub> a lớp C<sub>k</sub> trong S<sub>i,j</sub>
</div><span class="text_page_counter">Trang 69</span><div class="page_container" data-page="69">63
</div><span class="text_page_counter">Trang 70</span><div class="page_container" data-page="70">m ớ ợ ý ủa ố ớ m ủa . Hay mộ l mộ m ố ư ủa ượ ự lựa ọ ố ư ụ
</div><span class="text_page_counter">Trang 71</span><div class="page_container" data-page="71">4. Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest and Clifford Stein, “I Al ms Se T e MIT P ess 001 1180 pa es. 5. Jeff Cogswell, Christopher Diggins, Ryan Stephens, Jonathan Turkanis, “C++
C O’Re lly N em e 00 9 pa es.
6. N y H Đ G mộ số NXB G ụ 003 7. Đ M Tư . C l . NXB Đ ọ ố a H ộ .
2002.
</div>