1
PHÂN TÍCH VÀ
THIẾT KẾ GIẢI THUẬT
ANALYS AND DESIGN
ALGORITHMS
1
2
Mục tiêu môn học
Cung c p ki n th c và k năng trong ấ ế ứ ỹ
vi c phân tích đ ph c t p tính toán ệ ộ ứ ạ
c a gi i thu t.ủ ả ậ
Tìm hi u các chi n thu t thi t k gi i ể ế ậ ế ế ả
thu tậ
2
3
Nội dung môn học
3
TT Nội dung
Số
tiết
Phân bổ thời gian
Ghi
chú
Lý
thuyết
Bài
Tập
Tự
học
1
Các khái niệm căn bản về phân tích độ
phức tạp giải thuật
6 6 0 10
2
Phân tích độ phức tạp của một số giải
thuật sắp thứ tự và tìm kiếm
8 8 3 20
3
Phân tích độ phức tạp của một số giải
thuật trên cấu trúc dữ liệu
9 9 3 20
4
Phân tích độ phức tạp của một số giải
thuật đồ thị
5 5 3 20
5
Các chiến lược thiết kế giải thuật
8 8 3 15
6
Vấn đề NP-đầy đủ
9 9 3 20
TỔNG
60 60 0 105
4
Đánh giá kết quả
1. Kiểm tra giữa kỳ: Tự luận
Điểm Kiểm tra giữa kỳ < 4 không được thi kết thúc môn
học lại
2. Kiểm tra cuối kỳ: Tự luận
3. Bài tập lớn: làm các bài tập
4. Điểm Đề tài < 4 không được thi kết thúc môn học lại
5. Thi kết thúc môn: Tự luận
6. Kiểm tra thường kỳ
4
5
Tài liệu học tập
Giáo trình:
[1] Cormen, T. H., Leiserson, C. E, and Rivest,
Introduction to Algorithms, The MIT Press,
1997.
Tham khảo:
[2] Sedgewick, Algorithms in C++, Addison-
Wesley, 1998
[3] Weiss, M.A, Data Structures and Algorithm
Analysis in C , The Benjamin/Cummings
Publishing, 1993
5
6
Nhắc nhở một số quy định
Đi học đúng giờ
Đeo thẻ SV
Không để chuông điện thoại reo trong giờ học
Không nghe điện thoại, nhắn tin trong giờ học
Không nói chuyện riêng, làm ồn khi nghe giảng
Mang đầy đủ tài liệu học tập của môn học (khi học LT và
TH): giáo trình, bài tập, tập chép bài (hoặc slide bài
giảng), usb để lưu bài tập
Phải làm bài tập ở nhà
Nếu vi phạm: Nhắc nhở chung Bị mời ra khỏi lớp
Xóa tên khỏi môn học
6
7
Trao đổi thông tin
Địa chỉ mail:
•
Địa chỉ download tài liệu:
•
/>8
CÁC KHÁI NIỆM CĂN BẢN VỀ PHÂN
TÍCH ĐỘ PHỨC TẠP GIẢI THUẬT
Chương 1:
8
9
Nội dung
Thuật ngữ và Khái Niệm
Các định nghĩa về độ phức tạp
Kỹ thuật chia-để-trị và giải thuật đệ quy
Phương trình truy hồi và cách giải phương
trình truy hồi
Vài thí dụ minh hoạ về phân tích độ phức tạp
giải thuật
9
10
Thuật ngữ và khái niệm
Cấu trúc dữ liệu
Thuật toán
Độ phức tạp của thuật toán
10
11
Cấu trúc dữ liệu
(1) Sự tổ chức hợp lý của các thành phần dữ liệu,
(2) Tập các thao tác để truy cập các thành phần dữ liệu.
Ví dụ:
Mảng (Array)
Danh sách liên kết (Linked List)
Ngăn xếp (Stack)
Hàng đợi (Queue)
Cây (Tree)
…
(1) the logical arrangement of data elements, combined with
(2) the set of operations we need to access the elements.
11
12
Cấu trúc dữ liệu
Thuật toán
Độ phức tạp của thuật toán
12
Thuật ngữ và khái niệm
13
Thuật toán
Giải thuật hay thuật toán là dãy các thao tác xác
Giải thuật hay thuật toán là dãy các thao tác xác
định nhằm giải một bài toán nào đó.
định nhằm giải một bài toán nào đó.
Ví dụ: Tính tổng các số nguyên lẻ từ 1n
Input: Số nguyên n
Output: Tổng các số nguyên lẻ từ 1n
B1: S=0
B2: i=1
B3: Nếu i>n thì sang B7, ngược lại sang B4
B4: S=S+i
B5: i=i+2
B6: Quay lại B3
B7: Tổng cần tìm là S
13
14
Các đặc trưng của Thuật toán
INPUT: Có các bộ dữ liệu đầu vào thuộc một tập
hợp dữ liệu nào đó.
OUTPUT: Xuất dữ liệu đầu ra theo yêu cầu của bài
toán
Tính xác định: Mỗi bước của thuật toán hoàn toàn
xác định, được mô tả chính xác và cho kết quả xác
định
Tính dừng: Thuật toán phải kết thúc sau hữu hạn
bước.
Tính phổ dụng: Thuật toán áp dụng được cho mọi
bộ dữ liệu đầu vào thuộc tập hợp dữ liệu
14
15
Mối quan hệ của CTDL và thuật toán
CTDL + Thuật toán = Chương trình
15
16
Các phương pháp biểu diễn giải thuật
Các phương pháp biểu diễn giải thuật
Diễn đạt bằng ngôn ngữ tự nhiên
Diễn đạt bằng ngôn ngữ tự nhiên
Biểu diễn bằng sơ đồ khối
Biểu diễn bằng sơ đồ khối
Biểu diễn bằng Giả mã, thông thường dùng
Biểu diễn bằng Giả mã, thông thường dùng
ngôn ngữ tựa PASCAL;
ngôn ngữ tựa PASCAL;
Ngôn ngữ lập trình cấp cao (High programming
languages) như Pascal, C/C++ vv
16
17
Các phương pháp biểu diễn giải thuật
Các phương pháp biểu diễn giải thuật
Ví dụ: Tìm x trong dãy a1, a2, , an
Đầu vào: Số x, dãy n số a1, a2, , an
Đầu ra: Một giá trị logic true hoặc false
Search(x, a, n)
1 for i ←1 to n
2 do if ai= x
then return true
4 return false
17
18
Cấu trúc dữ liệu
Thuật toán
Độ phức tạp của thuật toán (algorithm complexity)
18
Thuật ngữ và khái niệm
19
Độ phức tạp của thuật toán
Độ phức tạp của giải thuật là chi phí về tài
nguyên của hệ thống (chủ yếu là thời gian, bộ
nhớ, CPU, đường truyền) cần thiết để thực hiện
giải thuật
Phân tích giải thuật (Analyzing of Algorithm) là
quá trình tìm ra những đánh giá về tài nguyên
cần thiết để thực hiện giải thuật
19
20
Thời gian thực hiện thuật toán
Độ phức tạp về thời gian của giải thuật:
Được qui về đếm số lệnh cần thực thi của giải
thuật
Đó là một hàm T(n) phụ thuộc vào kích thước n
của input
Coi như có một máy trừu tượng (abstract
machine) để thực hiện giải thuật
20
21
Thời gian tối thiểu để thực hiện giải thuật với
mọi kích thước đầu vào n gọi là thời gian chạy
tốt nhất(best-case)của giải thuật
Thời gian nhiều nhất để thực hiện giải thuật với
mọi kích thước đầu vào n được gọi là thời gian
chạy xấu nhất (worst-case) của giải thuật
Thời gian trung bình để thực hiện giải thuật với
mọi kích thước đầu vào n được gọi là thời gian
chạy trung bình (average case) của giải thuật
21
Độ phức tạp thời gian của thuật toán
22
Ví dụ Đánh giá độ phức tạp về thời gian của
giải thuật
Search(x, a, n)
1 for i ←1 to n
2 do if ai= x
3 then return true
4 return false
22
Độ phức tạp thời gian của thuật toán
23
Giải:
Gọi α, β và γ là thời gian thực hiện của phép
gán, phép so sánh và trả về của giải thuật
Trường hợp tốt nhất: Nếu a1= x, thìT(n) = α+β+ γ
Trường hợp xấu nhất : Nếu x {a1, a2, , an} thì ∉
T(n) = (n+1)α+ nβ+ γ
23
Độ phức tạp thời gian của thuật toán
24
Giải:
Trường hợp trung bình:
Tồn tại i, ai = x, thìT(n) = f(i) = iα+ iβ+ γ với xác
suất p(i) = 1/n
T(n) = [(α+β+ γ)+ (2α+ 2β+ γ)+ +(nα+ nβ+ γ)]/n
= [(n(n+1)(α+β)/2 +nγ]/n = (n+1)(α+β)/2 + γ
Lưu ý: T(n) là kỳ vọng (expected value) của
f(i)=αi +βi +γ trên không gian xác suất {1, 2, …,
n}
24
Độ phức tạp thời gian của thuật toán
25
Khung thức của sự phân tích
♦
Bước 1: Đặc trưng hóa dữ liệu nhập và quyết định kiểu
phân tích thích hợp. Thông thường, ta tập trung vào việc
Chứng minh rằng thời gian tính toán luôn nhỏ hơn một
“cận trên” (upper bound), hay
Dẫn xuất ra thời gian chạy trung bình đối với một dữ liệu
nhập ngẫu nhiên.
♦ Bước 2: nhận dạng thao tác trừu tượng (abstract
operation) mà giải thuật dựa vào đó làm việc.
Thí dụ: thao tác so sánh trong giải thuật sắp thứ tự.
Tổng số thao tác trừu tượng thường tùy thuộc vào một vài
đại lượng.
♦ Bước 3: thực hiện phân tích toán học để tìm ra các giá trị
trung bình và giá trị xấu nhất của các đại lượng quan trọng.