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

bài giảng phân tích thiết kế và đánh giá thuật toán

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

BỘ GIAO THÔNG VẬN TẢI

<b> TRƯỜNG ĐẠI HỌC HÀNG HẢI </b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

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

×