Thuật Toán Một thủ tục tính toán được định nghĩa rõ ràng Một chuỗi các bước tính toán Nhận một tập các giá trị đầu vào Trả một tập các giá trị đầu ra Tính đúng đắn: với tất cả c
Trang 1Thiết Kế & Đánh Giá Thuật Toán
Phân Tích Thuật Toán
TS Lê Nguyên Khôi Trường Đại Học Công Nghệ - ĐHQGHN
Trang 3Thuật Toán
Một thủ tục tính toán được định nghĩa rõ ràng
Một chuỗi các bước tính toán
Nhận một tập các giá trị đầu vào
Trả một tập các giá trị đầu ra
Tính đúng đắn: với tất cả các tập giá trị đầu
vào, thuật toán đưa ra tập giá trị đầu ra đúng
2
Trang 4Bài Toán
Sắp xếp
Tìm kiếm
Mạng Internet (định tuyến dữ liệu)
Thương mại điện tử
Doanh nghiệp sản xuất
Đường đi ngắn nhất
Chuỗi chung dài nhất
vân vân …
3
Trang 5 P: thuật toán có thể chạy trong thời gian đa thức
NP-complete: không thể chạy trong khoảng thời gian hợp lý
Song song:
Nhiều phép tính mỗi giây bằng nhiều lõi
4
Trang 6Phân Tích Thuật Toán
Phân tích lý thuyết hiệu năng chương trình vàtài nguyên sử dụng
Trang 7Phân Tích Thuật Toán & Hiệu Năng?
Thuật toán giúp hiểu khả năng mở rộng
Hiệu năng xác định ranh giới khả thi hay không
Thuật toán là ngôn ngữ để giải thích hành vi
của chương trình
Hiệu năng dùng đánh giá chương trình
Hiệu năng chương trình khái quát hóa các tàinguyên tính toán sử dụng
6
Trang 8 Thời gian chạy của thuật toán sắp xếp dãy số?
Thuật toán tốt nhất (chạy nhanh nhất)?
7
Trang 9Thuật Toán Sắp Xếp – Thời Gian Chạy
Trang 12Sắp Xếp Chèn – Tính Đúng Đắn
Khái niệm tính bất biến (loop invariant):
Bắt đầu mỗi vòng lặp for dãy con chính
là dãy con ban đầu nhưng đã được sắp xếp.
Khởi tạo: loop invariant đúng trước khi vòng
for lặp bắt đầu
Duy trì: loop invariant đúng trước một lần lặp
của vòng for, loop invariant đúng trước lần
lặp tiếp theo
Kết thúc: tính bất biến giúp chứng minh thuật
toán đúng
11
Trang 13Chứng Minh Quy Nạp – Induction Proof
Trang 14Phân Tích Thuật Toán – Giả Định
Xử lý tuần tự các phép toán
Các phép toán (thao tác) cơ bản
=, +, -, *, /, %, , , … load, store, copy, …
Trang 15Phân Tích Thuật Toán – Thời Gian Chạy
vào: dãy đã sắp xếp ≠ dãy chưa sắp xếp
liệu đầu vào: dãy ngắn ≠ dãy dài
xấu nhất)
14
Trang 16Phân Tích Thuật Toán – Thời Gian Chạy
Trường hợp xấu nhất: (thông thường)
= thời gian lâu nhất thuật toán chạy với dữ liệu đầu vào cỡ bất kỳ
Trường hợp trung bình: (đôi khi)
= thời gian trung bình thuật toán chạy với tất cả
dữ liệu đầu vào
Cần giả thiết về hàm phân phối xác xuất cho dữ liệu đầu vào
Trường hợp tốt nhất: (hiếm)
Lợi dụng thuật toán chậm chạy nhanh với một số dữ
15
Trang 18Sắp Xếp Chèn – Phân Tích Thời Gian
Trang 19Sắp Xếp Chèn – Phân Tích Thời Gian
18
Trang 20Sắp Xếp Chèn – Phân Tích Thời Gian
Trường hợp tốt nhất ( ):
hàm tuyến tính
Khi mảng đã sắp xếp tăng dần
19
Trang 21Sắp Xếp Chèn – Phân Tích Thời Gian
Trường hợp xấu nhất
hàm bậc hai
Khi mảng đã sắp xếp giảm dần
20
Trang 23Bài Tập – Exercise 2.1-4
Cộng 2 số n-bit:
Cho 2 số nguyên nhị phân n-bit, lưu trong 2
mảng n-phần tử A & B Tổng 2 số này lưu trongmảng n+1-phần tử C dưới dạng nhị phân
Viết mã giả cho thuật toán cộng 2 số này
Phân tích độ phức tạp của thuật toán
22
Trang 25Bài Tập – Exercise 2.2-2
Sắp xếp lựa chọn (selection sort):
Sắp xếp n số trong mảng A theo cách tìm phần
tử nhỏ nhất của A và đổi chỗ với A[1] Tìm
phần tử nhỏ nhất thứ hai của A và đổi chỗ vớiA[2] Tiếp tục như vậy cho n-1 phần tử đầu tiêncủa A
Viết mã giả cho thuật toán trên
Tính bất biến (loop invariant) của thuật toán?
Tại sao chỉ cần chạy với n-1 phần tử đầu tiên
Phân tích độ phức tạp của thuật toán (trườnghợp tốt nhất & xấu nhất)
24
Trang 27Bài Tập – Exercise 2.2-2
SelectionSort
Thời gian chạy:
26
Trang 28Bài Tập – Problem 2-2
27
Trang 31Tổng Kết
dữ liệu đầu vào
trường hợp xấu nhất
bậc hai đối với độ lớn dữ liệu đầu vào
30