Đang tải... (xem toàn văn)
BỘ GIAO THÔNG VẬN TẢI TRƯỜNG ĐẠI HỌC HÀNG HẢI... Nộ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... H nh thức và tiêu chuẩn đánh giá sinh viên Ngày
Trang 1BỘ GIAO THÔNG VẬN TẢI
TRƯỜNG ĐẠI HỌC HÀNG HẢI
Trang 2- C lượ : lượ a lượ ay l lượ ộ lượ am lam
- K ả ộ p p
Nộ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
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 6TÀ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
2.1 ô tả các ớc thực hiện
Đ bi u di n thu ư i ta mô tả x ước thực hi n của thu t toán, ngôn ng ù mô tả thu t toá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
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)
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 thu t toá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
(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
Trang 115 }
Số phép tính thu t toá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 toá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
Trang 12“ ộ p p a ủa l O(N2 ắ ọ l “ l O(N2 Tư ự a a (omega)v (theta):
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 ư
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 16Chiến c tham am (Greedy) C lượ am lam l mộ lượ x y ự 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
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)
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
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)
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 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 toá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:
Trang 22Đ 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ọ
Trang 25T ự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 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 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 36Heaps ọ ớ 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
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
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 ớ
Trang 4438
CHƯƠNG IV CHIẾN LƯ C CHI Đ TR
1 C sở của chiến c chia đ tr (Divide and Conquer)
Trang 4539 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);
Trang 46int *B1 = new int[m-l+1]; int *B2 = new int[r-m]; for(int i=0;i<m-l+1;i++)
Trang 47int *B=new int[r-l+1]; for (i=m; i>=l; i )
Trang 493 S p ếp nhanh (Quick sort)
s l sắp x p ượ C A R H a e ưa a ăm 19
Trang 5347
Cài đ t ng C của thuật toán t m kiếm nh phân
int binary_search(int a[], int left, int right, int key)
Trang 5751
+ 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 ộ
+ 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
3 Bài toán 2 ài toán nhân dãy các ma trận
Trang 591 ác đ nh đ c đi m cấu trúc c giải pháp tối ưu c ài toán
2 ìm c ng th c tru h i đệ ui ác đ nh giá tr c một giải pháp tối ưu
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
Trang 63ộ l p y ượ lê l mộ ả T a ủa m ộ ượ x a số yê s ư ớ a ắ ầ ướ
Trang 66Thực hiện ựa chọn theo ki u tham am (Greedy Choice)
M ầ y xem s ọ lựa ọ a s ọ lựa ọ ố
Trang 68Thực hiện một ựa chọn tham am
ổ đề 1: Tồ mộ l ọ a ố ư p Si,j a lớp Ck trong Si,j
Trang 6963
Trang 70m ớ ợ ý ủa ố ớ m ủa Hay mộ l mộ m ố ư ủa ượ ự lựa ọ ố ư ụ
Trang 714 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