Chương 2. Thuật toán –
Thuật giải
TRẦN MINH THÁI
Email:
Website: www.minhthai.edu.vn
1
Cập nhật: 05 tháng 09 năm 2015
Nội dung
#2
1. Thuật toán?
2. Thuật toán vs Thuật giải
3. Thuật giải Heuristic & các nguyên lý
4. Tìm kiếm chiều sâu & Tìm kiếm chiều rộng
5. Tìm kiếm leo đồi
6. Tìm kiếm ưu tiên tối ưu
7. Một số thuật giải cơ bản
Thuật tốn?
#3
Là một thủ tục tính tốn xác định nhận các giá trị
hoặc một tập các giá trị (input) và sinh ra một vài
giá trị hoặc tập giá trị (output)
Cách thức/ quy trình thực hiện hồn thành một
cơng việc xác định cụ thể nào đó.
VD Cộng 2 số, tính tổng dãy Fibonaci, …
Đặc trưng của Thuật tốn
#4
1. Tính đúng đắn
2. Tính dừng
3. Tính xác định
4. Tính hiệu quả
5. Tính phổ quát
??? Đặc trưng nào quan trọng nhất ???
Đặc trưng của Thuật tốn …
#5
[1] Tính đúng đắn *
Đảm bảo kết quả đúng sau khi thực hiện đối với
bộ dữ liệu đầu vào
[2] Tính dừng
Dừng Sau một vài bước thực hiện
Đặc trưng của Thuật tốn …
#6
[3] Tính xác định
- Rõ ràng, cụ thể
- Không nhập nhằng, gây hiểu lầm hiểu, cài đặt
[4] Tính hiệu quả
- Giải quyết trong thời gian, điều kiện cho phép
- Đáp ứng yêu cầu người dùng
[5] Tính phổ qt
Có thể giải quyết được một lớp bài toán tương tự
Cách biểu diễn thuật tốn
#7
02 cách phổ biến
[1] Mơ tả các bước thực hiện của thuật toán
[2] Sử dụng sơ đồ thuật toán
Cách biểu diễn thuật tốn
#8
[1] Mơ tả các bước thực hiện của thuật tốn
- Ngơn ngữ tự nhiên
- Mã giả (Pseudocode): Lai ghép ngôn ngữ tự
nhiên với mã của ngôn ngữ lập trình
VD Mơ tả các bước thực hiện của thuật tốn
tìm USCLN của hai số nguyên – NN tự nhiên
#9
Input: Hai số nguyên a, b
Output: USCLN của a và b
Thuật toán:
Bước 1: Nếu a = b thì USCLN là a
Bước 2: Nếu a > b thì tìm USCLN của a - b và b,
quay lại Bước 1
Bước 3: Nếu a < b thì tìm USCLN của a và b - a,
quay lại Bước 1
VD Mơ tả các bước thực hiện của thuật tốn
tìm USCLN của hai số nguyên – Mã giả
#10
Input: Hai số nguyên a, b
Output: USCLN của a và b
Thuật toán:
WHILE (a ≠ b) DO
IF (a > b) THEN
a = a – b;
ELSE
b = b – a;
END WHILE
RETURN a;
Một số từ khóa mã giả cơ bản
#11
IF <Điều kiện> THEN …ENDIF
IF <Điều kiện> THEN ... ELSE ... ENDIF
WHILE <Điều kiện> DO … ENDWHILE
DO … UNTIL <Điều kiện>
DISPLAY …
RETURN …
Cách biểu diễn thuật toán
#12
[2] Sử dụng sơ đồ thuật tốn (flowchart)
Dùng các ký hiệu hình học để biểu diễn quá trình
thực hiện
Nhập/ xuất
Bắt đầu/ kết thúc
Điều kiện
Rẽ nhánh
Luồng xử lý
Trả về giá trị
Khối xử lý
VD Sơ đồ thuật tốn tìm trị tuyệt đối của số
nguyên
#13
Input: Số nguyên n
Output: Giá trị tuyệt đối của n
Thuật toán:
Độ phức tạp thuật toán
#14
Đánh giá độ tốt/ xấu của thuật toán cùng loại
Đơn giản, dễ hiểu, dễ cài đặt
Thời gian thực hiện, sử dụng tài nguyên hệ thống
??? Thực tế ???
- Thuật toán hiệu quả Dễ hiểu, dễ cài đặt?
- Ước lượng số phép tính thực hiện Thời gian?
VD Thuật toán sắp xếp mảng một chiều bằng
phương pháp đổi chỗ trực tiếp
#15
• Input: Mảng một chiều a, kích thước N
• Ouput: Mảng a có thứ tự tăng dần
• Thuật tốn:
Bước 1: i=1;
Số phép tính cần thực hiện?
Bước 2: j = i+1;
Bước 3:
Trong khi j<=N thực hiện
Nếu a[j]
j=j+1;
Bước 4: i = i+1;
Nếu i
Ngược lại: Dừng.
Thuật tốn vs Thuật giải
#16
Tuy nhiên
Nhiều bài tốn chưa tìm ra một cách giải theo kiểu
thuật tốn/ khơng biết là có tồn tại thuật tốn?
Nhiều bài tốn đã có thuật tốn nhưng khơng chấp
nhận được vì thời gian q lớn/ điều kiện khó đáp
ứng
Nhiều bài tốn được giải theo những cách giải vi
phạm thuật toán nhưng vẫn chấp nhận được
Thuật tốn vs Thuật giải
#17
Tiêu chuẩn: tính xác định và tính đúng đắn được
mở rộng
Tính xác định thay đổi: giải thuật đệ quy và ngẫu
nhiên
Tính đúng khơng cịn bắt buộc: cách giải gần đúng
Chấp nhận các cách giải thường cho kết quả tốt
(nhưng không phải lúc nào cũng tốt) nhưng ít phức
tạp và hiệu quả.
Thuật toán vs Thuật giải
#18
Lựa chọn?
“giải một bài toán bằng thuật tốn tối ưu địi hỏi máy
tính thực hiện nhiều năm”
hay
“một giải pháp gần tối ưu mà chỉ cần máy tính chạy
trong vài ngày hoặc vài giờ”
Khái niệm thuật giải
#19
Cách giải chấp nhận được nhưng không hoàn
toàn đáp ứng đầy đủ các tiêu chuẩn của thuật toán
thường được gọi là các thuật giải
Dễ dàng hơn trong việc tìm kiếm phương pháp để
giải quyết các bài tốn được đặt ra
Trong AI thường sử dụng cách giải theo kiểu
Heuristic
Đặc điểm thuật giải Heuristic
#20
Thường tìm được lời giải tốt (nhưng không chắc là
lời giải tốt nhất)
Dễ dàng và nhanh chóng đưa ra kết quả hơn so với
giải thuật tối ưu chi phí thấp hơn
Thể hiện khá tự nhiên, gần gũi với cách suy nghĩ
và hành động của con người
Các phương pháp Heuristic
#21
1. Nguyên lý vét cạn thông minh
2. Nguyên lý tham lam (Greedy)
3. Nguyên lý thứ tự
4. Hàm Heuristic
Các phương pháp Heuristic
#22
[1] Ngun lý vét cạn thơng minh
Tìm cách giới hạn lại khơng gian tìm kiếm/ thực
hiện một kiểu dị tìm đặc biệt dựa vào đặc thù của
bài tốn để nhanh chóng tìm ra mục tiêu
[2] Ngun lý tham lam
Chọn lựa hành động tối ưu cho phạm vi cục bộ
của từng bước trong quá trình tìm kiếm lời giải
Các phương pháp Heuristic
#23
[3] Nguyên lý thứ tự
Dựa trên một cấu trúc thứ tự hợp lý của không
gian khảo sát nhằm nhanh chóng đạt được một lời
giải tốt
[4] Hàm Heuristic
Hàm đánh giá thô, giá trị của hàm phụ thuộc vào
trạng thái hiện tại của bài toán tại mỗi bước giải
Giá trị của hàm chọn được cách hành động
tương đối hợp lý trong từng bước của thuật giải
Các bài tốn tiêu biểu
#24
Bài tốn hành trình ngắn nhất – Nguyên lý Greedy
Bài toán phân việc – Nguyên lý thứ tự
Bài toán Ta-canh – Hàm Heuristic
Bài tốn hành trình ngắn nhất
#25
Travelling Salesman Problem - TSP
Cho trước một danh sách các điểm giao hàng và
khoảng cách giữa chúng. Nhân viên giao hàng xuất
phát từ một điểm cho trước. Tìm đường đi ngắn nhất
sao cho tất cả các điểm phải được giao hàng và mỗi
điểm chỉ viếng thăm đúng một lần