PHÂN TÍCH THIẾT KẾ
THUẬT TOÁN
1
GIỚI THIỆU MÔN HỌC
Tên học phần: Phân tích thiết kế thuật toán
Tên tiếng Anh: Design and Analysis of Algorithms
Số tín chỉ: 3LT + 1TH
Hình thức đánh giá:
Thực hành (30%): Bài tập
Lý thuyết(70%): Thi viết
2
MỤC TIÊU MÔN HỌC
Trang bị cho sinh viên
Hiểu đƣợc về thuật toán: Khái niệm, tính chất, cách biểu
diễn, độ phức tap.
Biết các kiến thức toán học cơ sở cho việc đánh giá độ phức
tạp của tuật toán
Áp dụng đƣợc các phƣơng pháp thiết kế để xây dựng các
thuật toán, đồng thời biết cách đánh giá độ phức tạp của
thuật toán.
3
NỘI DUNG
Chƣơng 1: Giới thiệu thuật toán
Chƣơng 2: Kỹ thuật đánh giá thuật toán
Chƣơng 3: Kỹ thuật thiết kế thuật toán
Chƣơng 4 (option): Một số vấn đề mở rộng và nâng cao
4
TÀI LIỆU THAM KHẢO
Cẩm nang thuật toán – cuốn 1, Robert Sedgewich –
Trần Đan Thƣ
Cấu trúc dữ liệu và thuật toán, Đại học Công nghệ
thông tin.
Lê Minh Hoàng, Giải thuật và Lập trình, Đại học Sƣ
phạm Hà Nội, 2002
Samir Khuller, Design and Analysis Algorithms:
Lecture note, 2012
5
CHƢƠNG 1
GiỚI THIỆU VỀ THUẬT TOÁN
6
NỘI DUNG
1. Khái niệm về thuật toán
2. Độ phức tạp của thuật toán
2.1. Ký hiệu tiệm cận: Big-O
2.2. Lớp các hàm thông dụng
3. Phân loại sơ bộ các đoạn mã thuật toán.
3.1 Không tính toán lặp
3.2 Có tính toán lặp
7
NỘI DUNG
1. Khái niệm về thuật toán
2. Độ phức tạp của thuật toán
2.1. Ký hiệu tiệm cận: Big-O
2.2. Lớp các hàm thông dụng
8
1. KHÁI NIỆM VỀ THUẬT TOÁN
Thuật toán là gì?
Tập hợp hữu hạn các hƣớng dẫn rõ ràng để giải quyết một
bài toán (vấnđề).
Mở rộng (máy tính): một dãy hữu hạn các bƣớc không mập
mờ và có thể thực thi đƣợc, quá trình hành động theo các
bƣớc này phải dừng và cho đƣợc kết quả nhƣ mong muốn.
Tính chất cơ bản của thuật toán:
Xác định = không mập mờ+thực thi đƣợc
Hữu hạn
Đúng
9
1. KHÁI NIỆM VỀ THUẬT TOÁN
Các dạng diễn đạt thuật toán
Ngôn ngữ tự nhiên
Lƣu đồ (Sơ đồ khối)
Mã giả
Ngôn ngữ lập trình
10
Dữ kiện vào
Quá trình tính toán
Một dãy các bước tính toán
Một dãy số
Thuật toán sắp xếp
11
1. KHÁI NIỆM VỀ THUẬT TOÁN
Ví dụ: Một lớp học cần chọn lớp trƣởng theo các bƣớc:
1. Lập danh sách sinh viên
2. Sắp thứ tự
3. Chọn ngƣời đứng đầu làm lớp trƣởng
Danh sách cần gì?
Sắp theo thứ tự nào? (tăng giảm, tiêu chí nào)
Nếu trùng tiêu chí thì giải quyết ra sao?
12
1. KHÁI NIỆM THUẬT TOÁN
Sửa lại:
a) Lập danh sách theo: họ tên, ngày tháng năm sinh, điểm các môn,
điểm trung bình cuối năm.
b) Sắp xếp theo ĐTB giảm. Nếu ĐTB bằng nhau cùng hạng.
c) Nếu có 01HS đứng đầu chọn, ngƣợc lại chọn ngƣời có điểm toán
cao nhất, nếu không chọn đƣợc thì bốcthăm.
Phân biệt mập mờ và lựa chọn có quyết định:
Mập mờ là thiếu thông tin hoặc có nhiều lựa chọn nhƣng không
đủ điều kiện quyết định, ví dụ:bƣớc 1, 2.
Lựa chọn có quyết định là hoàn toàn xác định duy nhất trong
điều kiện cụ thể của vấn đề,ví dụ bƣớc c.
13
1. KHÁI NIỆM VỀ THUẬT TOÁN
Đặc trƣng của thuật toán
Xác định đầu vào/ ra
Tính hiệu quả: khối lƣợng tính toán, không gian, thời
gian
Giải quyết một bài toán
Có nhiều thuật toán. Chọn thuật toán nào ?
Mô hình hóa
Lập chƣơng trình
Viết thuật toán
14
PHÂN TÍCH THUẬT TOÁN
Sự cần thiết của phân tích và đánh giá thuật toán
Lựa chọn một thuật toán tốt nhất trong các thuật toán để cài
đặt chƣơng trình giải quyết bài toán đặt ra
Cải tiến thuật toán hiện có để có đƣợc thuật toán tốt hơn
Một thuật toán được xem là tốt nếu nó đạt được các
tiêu chuẩn sau
Thực hiện đúng
Tốn ít bộ nhớ
Thực hiện nhanh
Trong khuôn khổ của môn học này, chúng ta chỉ quan tâm
đến tiêu chuẩn thực hiện nhanh
15
PHÂN TÍCH THUẬT TOÁN
Thời gian thực hiện chương trình: là một hàm của
kích thƣớc dữ liệu vào.
Ký hiệu: T(n) với n là kích thƣớc dữ liệu vào
Ví dụ: Chƣơng trình tính tổng của n số có thời gian thực
hiện là T(n) = Cn với C là hằng số
Thời gian thực hiện chƣơng trình là một hàm không âm
16
PHÂN TÍCH THUẬT TOÁN
Đơn vị đo T(n) không phải là đơn vị đo thời gian bình
thƣờng nhƣ giờ, phút, giây, … mà thƣờng đƣợc xác định
bởi số các lệnh đƣợc thực hiện trong máy tính
Ví dụ: Khi ta nói thời gian thực hiện chƣơng trình là
T(n) = Cn có nghĩa là chƣơng trình ấy cần có Cn chỉ thị.
17
PHÂN TÍCH THUẬT TOÁN
Ví dụ:
Xem xét đoạn mã giả sau:
sum = 0;
for(i= 0; i < n; i++)
sum = sum + i;
return sum
T(n) = ?
18
PHÂN TÍCH THUẬT TOÁN
Thời gian thực hiện trong trƣờng hợp xấu nhất
Thời gian thực hiện chƣơng trình không chỉ phụ thuộc và
kích thƣớc dữ liệu mà còn phụ thuộc vào tính chất của dữ liệu
Vì vậy ta thƣờng coi T(n) là thời gian thực hiện chƣơng
trình trong trƣờng hợp xấu nhất, tức là T(n) là thời gian
lớn nhất để thực hiện chƣơng trình đối với mọi dữ liệu có
cùng kích thƣớc n.
19
PHÂN TÍCH THUẬT TOÁN
Làm sao xác định “thời gian thực hiện chƣơng trình
T(n)” ?
1. Hƣớng tiệm cận
Thực nghiệm
Lý thuyết
2. Công cụ toán học (Chƣơng 2)
Kỹ thuật sơ cấp
Hàm sinh
Hoán vị và nghịch thế
20
HƢỚNG TIẾP CẬN THỰC NGHIỆM
Các bƣớc thực hiện
1. Viết chƣơng trình cài đặt
2. Thực thi chƣơng trình với nhiều bộ dữ liệu
3. Đo và thống kê thời gian
4. Xấp xỉ biểu đồ
Hạn chế
1. Cần phải cài đặt chƣơng trình và đo thời gian
2. Bộ dữ liệu không thể đặc trƣng hết
3. Khó so sánh hai thuật giải
21
HƢỚNG TIẾP CẬN LÝ THUYẾT
Tính toán thời gian, bộ nhớ, … cần thiết của mỗi thuật
toán dựa theo độ lớn của dữ liệu đầu vào
Ƣu điểm:
Không phụ thuộc vào ngôn ngữ lập trình, loại máy tính
Biết đƣợc tính hiệu quả của thuật toán đối với các dữ liệu có
kích thƣớc lớn
22
NỘI DUNG
1. Khái niệm về thuật toán
2. Độ phức tạp của thuật toán
2.1. Ký hiệu tiệm cận: Big-O
2.2. Lớp các hàm thông dụng
23
2. ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
2.1 KÝ HIỆU TIỆM CẬN: BIG-O
Cho một hàm T(n), T(n) được gọi là có độ phức tạp
f(n) nếu tồn tại các hằng số C, n
0
sao cho:
T(n) ≤ Cf(n) với n n
0
Ký hiệu: T(n) = O(f(n)) ( Ý nghĩa: T(n) O(f(n)) )
(Hàm f(n) là chặn trên của hàm T(n))
Chú ý:
O(Cf(n)) = O(f(n)) với C là hắng số
O(C) = O(1)
24
2. ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
2.1 KÝ HIỆU TIỆM CẬN: BIG-O
25