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
Trang 1PHÂN TÍCH THIẾT KẾ THUẬT TOÁN
1
Trang 2GIỚ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
Trang 3MỤ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
Trang 4NỘ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
Trang 5TÀI LIỆU THAM KHẢO
Cẩm nang thuật toán – cuốn 1, Robert Sedgewich –
Trang 6CHƯƠNG 1 GiỚI THIỆU VỀ THUẬT TOÁN
Trang 7NỘ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
Trang 8NỘ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
Trang 91 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
Trang 101 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
Trang 11Dữ kiện vào M ột dãy các bước tính toán Quá trình tính toán
M ột dãy số
Thuật toán sắp xếp
11
Trang 121 KHÁI NIỆM VỀ THUẬT TOÁN
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?
Trang 131 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
Trang 141 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
Mô hình hóa Viết thuật toán Lập chương trình
Trang 15PHÂ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
Trang 16PHÂ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
Trang 17PHÂ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
Trang 18PHÂN TÍCH THUẬT TOÁN
Trang 19PHÂ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
Trang 20PHÂN TÍCH THUẬT TOÁN
Làm sao xác định “thời gian thực hiện chương trình
Trang 21HƯỚ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
Trang 22HƯỚ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
Trang 23NỘ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
Trang 242 ĐỘ 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:
Trang 252 ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
2.1 KÝ HIỆU TIỆM CẬN: BIG-O
25
Trang 262 ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
Trang 272 ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
Trang 282 ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
1
1 2
1
2 2
2 2
n n
O n
Trang 292 ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
2.1 KÝ HIỆU TIỆM CẬN: BIG-O
Các qui tắc tính O:
Cho T 1 (n) và T 2 (n) là thời gian thực hiện của
hai đoạn chương trình P 1 và P 2 ; và T 1 (n) =
O(f(n)) và T 2 (n) = O(g(n)).
Qui tắc cộng : Thời gian thực hiện của hai
đoạn chương trình P 1 , P 2 nối nhau là T(n) =
O(max(f(n), g(n)))
Qui tắc nhân : Thời gian thực hiện của hai
đoạn chương trình P 1 , P 2 lồng nhau là T(n) =
O(f(n)*g(n))
29
Trang 302 ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
2.2 CÁC LỚP HÀM THÔNG DỤNG
Trang 312 ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
2.2 CÁC LỚP HÀM THÔNG DỤNG
31
Trang 322 ĐỘ PHỨC TẠP CỦA THUẬT TOÁN
2.1 KÝ HIỆU TIỆM CẬN: BIG-O
Định lý:
g(n) = O(f(n)) a.g(n) = O(f(n)) a> 0
d(n) = O(f(n)), e(n) = O(g(n)) d(n)+e(n) = O(f(n)+g(n))
d(n) = O(f(n)), e(n) = O(g(n)) d(n)e(n) = O(f(n)g(n))
d(n) = O(f(n)), f(n) = O(g(n)) d(n) = O(g(n))
f(n) là một đa thức bậc d f(n) = O(n d )
Trang 33BÀI TẬP
1.1.1 Hãy chạy thuật toán Insertion-Sort
Đối với các bảng sau :
A = [3,1,4,1,5,9,2,6,5,3]
B = [1,2,3,4,5,6]
C = [6,5,4,3,2,1]
1.1.2 Tính thời gian thực hiện chương trình
của thuật toán tìm n! (không dùng đệ qui)
Trang 34BÀI TẬP
1.2.1: Thuật toán A có kích thước dữ liệu vào là n và thời gian thực
hiện chương trình là: CM: T(n) = O(n 3 ).
1.2.2: Chứng minh
1.2.3: Phát biểu bài toán:
Cho trước một mảng X chứa n số cho trước, mảng trung
bình tiền tố A của mảng X là một mảng có n phần tử được
định nghĩa như sau:
A[i] = avg(X[1] X[i])
Hãy viết thuật toán xác định mảng trung bình tiền tố A
n n
n
10
1 )
( 3
) (
2
1k k k k1
n O n