BỘ GIAO THÔNG VẬN TẢI TRƯỜNG ĐẠI HỌC HÀNG HẢI... Rivest, Clifford Stein, Introduction to Algorithms, Second Edition, MIT Press, 2001.. H nh thức và tiêu chuẩn đánh giá sinh viên Ngày p
Trang 1BỘ GIAO THÔNG VẬN TẢI
TRƯỜNG ĐẠI HỌC HÀNG HẢI
Trang 2Nội dung chi tiết của học phần
TÊN CHƯƠNG ỤC PHÂN PHỐI SỐ TIẾT TS LT TH/Xemina BT KT
Ch ng I Các khái niệm c ản 5 4 0 1 0 1.1 G ớ
1
Ch ng II S p ếp và t m kiếm 15 7 5 2 1 1 B sắp x p
Trang 31
1 0,5
1
0,5
1
1 0,5
1
1
Ch ng VI Chiến c tham am 6 4 1 1 0 1 N yê ắ am lam
Trang 4Nhiệm vụ của sinh viên
T am ự y ủa ê ự ọ ự l m p do giáo viên giao,
- R a Neap l a Kumarss Naimipour, Foundations of Algorithms Using
C++ Pseudocode, Third Edition, Jones and Bartlett Publishers, 2004
- Thomas H Cormen, Charles E Leiserson, Ronald L Rivest, Clifford Stein,
Introduction to Algorithms, Second Edition, MIT Press, 2001
H nh thức và tiêu chuẩn đánh giá sinh viên
Ngày phê duyệt / /20
Tr ởng ộ môn ThS Nguyễn Hữu Tuân (ký và ghi rõ họ tên)
Trang 5iv
ỤC LỤC
LỜI NÓI ĐẦU 1
CH NG I: C C KH I NI M C BẢN 2
1 T ả - Algorithm 2
1.1 Đ a 2
1 Đ ư ủa 2
B 2
1 Mô ả ướ ự 2
S ụ s ồ lư ồ ả l a 3
3 Độ p p – Algorithm Complexity 4
3.1 C ê 4
3 Đ a ự 4
3.3 C a ộ p p 5
3.4 C lớp 7
4 C l – Data structure 9
C lượ 9
1 D y ộ x a s e sea 9
Đ ay l – Backtracking 9
3 C a D e a C e 9
4 C lượ am lam G ee y 10
ộ Dy am P amm 11
B p 11
CH NG II: S P X P SORTING VÀ TÌM KI M S ARCHING 13
1 B sắp x p 13
1.1 Sắp x p I e al S 13
1 Sắp x p x e al S 13
1.3 Sắp x p p 13
1.3 C ê ẩ mộ sắp x p 14
C p ư p p sắp x p ả 15
1 Sắp x p ọ Sele s 15
Sắp x p ự p x a e s 17
3 Sắp x p è I se s 19
4 Sắp x p ọ B le s 21
Trang 6v
S s sắp x p ả 23
3 C l Heap sắp x p ố Heap s 24
4 T m m y 31
C 33
B p 33
CH NG III: Đ UI VÀ CHI N L C V T CẠN 34
1 K m 34
2 C lượ B e e 34
3 C lượ ay l Ba a / y a e 35
CH NG IV: CHI N L C CHIA Đ TR 38
1 C s ủa lượ a D e a C e 38
2 Sắp x p ộ Me e s 38
3 Sắp x p a s 43
4 T m m p 46
5 B p 48
CH NG V: UI HOẠCH ĐỘNG 49
1 C lượ ộ 49
2 B 1: D y a 49
3 B : B y ma 51
4 P ư p p ộ 53
5 B y 53
6 B p 57
CH NG VI: CHI N L C THAM LAM GR D ) 60
1 N yê ắ am lam 60
2 B 60
3 Bài t l p l 61
4 S s lượ am lam ộ 64
TÀI LI U THAM KHẢO 65
ĐỀ THI THAM KHẢO 66
Trang 82
CHƯƠNG I C C H I NIỆ CƠ ẢN
1 Thuật toán (giải thuật) - Algorithm
2 i u diễn thuật toán
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
Trang 93
Ví dụ: mô tả thu m ước số chung lớn nh t của hai số nguyên
Input: Hai số nguyên a, b
O p : ớ số lớ ủa a
Thuật toán:
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
2 2 Sử dụng s đ ( u đ ) giải thuật (flowchart)
Mộ p l s ụ s ồ (Algorithm Flowchart)
Trang 104
hối C l p x l
3 Độ phức tạp thuật toán – Algorithm Complexity
3 1 Các tiêu chí đánh giá thuật toán
T ô ư m ộ tốt, x u và so sánh các thu t toán cùng lo i, có th dựa trên ha ê ẩ :
ê ộ 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
(algorithm complexity) V bản ch ộ ph c t p thu t toán là mộ m ướ lượng (có th
không chính xác) số phép tính mà thu t toá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
3.2 Đánh giá th i gian thực hiện thuật toán
Đ minh họa vi ộ ph c t p thu t toán ta xem xét ví dụ v thu t toán sắp x p chọn (selection sort) và sắp x p i ch trực ti p ex a e s ư sa :
Cài t của thu t toán sắp x p chọn:
Trang 11l 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 toán sắp x p chọ x ướng tố s ới sắp
Trang 12“ ộ p p a ủa l O(N2 ắ ọ l “ l O(N2
Tư ự a a (omega)v (theta):
Trang 137
3.4 Các ớp thuật toán
K a ộ p p a / ô a ớ ủa mộ ay s
ụ ý a ả p ớ lớp ủa m V ụ f(N) = N a s l y l ea C am ả êm:
Trang 159
N a l O(N2 a ẫ ư l
l O N a ưa a ượ ô x
4 Cấu tr c dữ iệu – Data structure
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 ư trình
Các chiến c thiết kế thuật toán
K ô mộ p ư p p p a x y ự ê
ả l C a ọ m y ê ưa a lượ ả p ụ l a
5.1 Duyệt toàn ộ (E hausted search)
5.2 Đệ qui quay ui – Backtracking
C lượ ay l l mộ lượ x y ự ựa ê a qui N m ủa ượ mô a ướ mộ e m p ầ ủa e
Trang 1610
a s a ả
sa ợp m ủa l m ủa a ầ T y ê ă y m a y ố: l m a
mộ ợp lý l ượ ả y
a s p p y ố a l ợp l ả ủa
s ượ ự ư
C sắp x p ộ me e s sắp x p a s ộ l
a y ượ y ư 3
Ví dụ[6, trang 57]: T ụ y a s xem x a N Đ a a ý ô sa : N N N/2 2 N/2 2 1 nÕu N = 0 a (a ) nÕu N ch½n a*(a ) nÕu N lÎ T ô ê a s y a ủa ư sa : int power(int a, int n) { if(n==0) return 1; else{ int t = power(a, n/2); if(n%2==0) return t*t; else return a*t*t; } } Chiến c tham am (Greedy) C lượ am lam l mộ lượ x y ự m m ố ư ụ ộ ố ư m ượ m ố ư ụ ả ư
ợp T ư ợp m l ả ủa lượ am lam ư
ă a ộ p p p Ch ý: T mộ số x y ự ượ m ọ ợp
m ố ư T am ă m ầ ớ m
ố ư
Trang 17s 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) = a0 + x*(a1+x*(a2+x* +x an-1+an*x Cô H e
ài tập C 4 ộp ướ a m m ủa ộp ượ ô 1
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
Trang 1812
ài tập 7 H y ư a ượ a ả số yê
số a số
ài tập 8 p ụ s a ả số yê ố N
Trang 1913
CHƯƠNG II: S P XẾP (S RTING) VÀ T IẾ (SE RCHING)
1 Bài toán s p ếp
1 1 S p ếp trong (Interna Sorting)
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 sau:
+ Mộ ư ng (field) là mộ d li ẳng h ư ê i, số n tho i của mộ ư i
T p m ủa mô ọ y a xem x sắp x p Cụ
ầ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)
Trang 2014
Ví dụ: chúng ta muốn sắp x p các bản ghi của le sa y:
Index Dept Last First Age ID number
ta không nh t thi t phả i các bả a ầu)
1.3 Các tiêu chuẩn đánh giá một thuật toán s p ếp
Các thu t toá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
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:
Trang 21S ồ :
Trang 22j<n j=i+1
i=i+1
j=j+1
Đ S
S
Đ
Đ S
Đ n mã sau minh họa cho thu t toán:
void selection_sort(int a[], int n)
{
int i, j, vtmin;
Trang 23Vớ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
(n–2), thu t toán s cần (n-1) + (n- + + 1 -1)/2 t c là O(n2) phép so sánh T mọ
I e a e s ay S a Sele S
Mô ả: Bắ ầ x p ầ ầ ê a ớ 0 a x ả p ầ sa
a ọ l a ớ y +1 ớ -1 ố ù Vớ m p a a ý l a
l p ầ sa a a a l xảy a sa a s a a[j]
Ví dụ minh họa G ả s mả a ầ l a 1 19 3 1 C ướ ủa
s ượ ự ư sa :
i=0, j=2: 1, 6, 2, 19, 3, 12
Trang 24j<n j=i+1
a[j]<a[i]
Đ S
i=i+1 j=j+1
Đ S
Trang 2519
for(j=i+1;j<n;j++) if(a[j] < a[i])
// a a tam = a[i];
a[i] = a[j];
a[j] = tam;
} }
Độ p p ủa : C y s ớ sắp x p ọ sắp x p ự p ầ số ướ s s ư ư : l * -1 / lầ s s
N ư số ướ a p ầ ớ số lầ s s : * -1 / T ư
ợp x số ướ ủa ớ số lầ s s ư ợp
số ướ l * -1 /4 C ư ợp ố số ướ 0
N ư y sắp x p ự p l m s ớ sắp x p ọ số lầ
2.3 S p ếp ch n (Insertion sort)
Mô ả :
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 :
Trang 26Đ S
Trang 27Vớ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
là O(n2 p p s s ư ự ư t toán sắp x p chọn Tuy nhiên l p le ô
Trang 28j>i j=n-1
a[j]<a[j-1]
Đ S
i=i+1 j=j-1
Trang 2923
for(i=n-1;i>=0;i )
for(j=1;j<=i;j++) if(a[j-1]>a[j]) swap(a[j-1],a[j]);
Trang 30l mộ y p ầy ủ l mộ y p ầy ả ầ ủa y ầ ố
ù ầy p a ủa y C mô ả l mộ y p m
Trang 31 Left(i) = 2*i + 1
Right(i) = 2*i + 2
Parent(i) = (i-1)/2
Ví dụ
Trang 37ô a m m ượ lư ê ộ ớ ủa m y m m
K ả m m l v trí của phần tử th a mãn điều kiện t m kiếm: ư a
ớ mộ a ướ a m m T m y y a
y p ớ ô ượ a ư l ủa p ầ m y N
ả l ô m y ư ợp y ẫ ô ả
s ượ mộ ư ư ớ ô ồ p ầ : ẳ ư -1 ố ớ mả NULL ố ớ a s l ê
Trang 3933
5 Các vấn đề khác
N ượ y ê ẫ mộ số m
a am ả : ẳ ư sắp x p S ell s sắp x p m Counting sort sắp x p số Ra x s C y ượ xem ư p ầ ự m
Trang 4034
CHƯƠNG III ĐỆ QUI VÀ CHIẾN LƯ C V T CẠN
1 hái niệm đệ qui
Trang 4135
ê số ư ợp ầ p ả ủa ư lê ớ số lớ ư l s
ớ yê ầ ủa a
3 Chiến c quay ui ( ack tracking / try and error)
Đ y l mộ lượ a ọ ủa Tư
ự ư lượ s lượ ay l mộ m : lư
ả ă p ượ ướ p l ầ lù l mộ ướ l
ả ă ưa ượ T ô ư ả y ư ượ ắ l ớ