1 of 12

1

KHOA CÔNG NGHỆ THÔNG TIN

Phân Tích Thiết Kế Thuật Toán Nâng Cao

Nguyễn Phước Thắng

Vĩnh Long, ngày 27 tháng 11 năm 2022

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT VĨNH LONG

2 of 12

2

NỘI DUNG:

TỔNG QUAN THUẬT TOÁN

1

ỨNG DỤNG THUẬT TOÁN

2

VÍ DỤ DEMO

3

3 of 12

3

1. TỔNG QUAN THUẬT TOÁN

a. Kỹ thuật Quy Hoạch Động (Dynamic Programming)

Nhà toán học Richard Bellman đã phát minh ra kỹ thuật Quy hoạch động vào năm 1953.

Kỹ thuật quy hoạch động là một trong những kỹ thuật giúp chúng ta thiết kế các chương trình có thời gian thực hiện tốt và hiệu quả

4 of 12

4

* Trong giải thuật đệ quy, một số bài toán con nào đó bị giải nhiều lần, do đó tốn rất nhiều thời gian.

* Giải pháp: Lưu trữ kết quả bài toán con, khi cần thì sử dụng kết quả đó mà không cần phải giải lại bài toán con.

* Do đó nhiều bài toán con nên cần sử dụng một bảng để lưu trữ kết quả của bài toán con.

* Tạo bảng bằng cách:

  • Gán giá trị cho một ô số nào đó. (giá trị đã biết trước)
  • Gán giá trị cho các ô khác nhờ vào giá trị các ô trước đó

* Kết quả của bài toán ban đầu cũng nằm trong bảng này, do đó chỉ cần tra bảng để xác định kết quả của bài toán ban đầu.

5 of 12

5

Ưu điểm của quy hoạch động:

  • Chương trình thực hiện nhanh.
  • Kỹ thuật quy hoạch động có thể vận dụng để giải các bài toán tối ưu, các bài toán có công thức truy hồi,..

Quy hoạch động sẽ không đem lại hiệu quả khi:

  • Không tìm được công thức truy hồi.
  • Số lượng các bài toán con cần giải quyết và lưu giữ kết quả là rất lớn.
  • Sự kết hợp lời giải của các bài toán con chưa chắc cho ta lời giải của bài toán ban đầu.

6 of 12

6

Một bài toán khá quen thuộc là tính số tổ hợp chập k của n theo công thức truy hồi:

Công thức trên đã gợi ý cho chúng ta một giải thuật đệ qui như sau: �

7 of 12

7

Đánh giá độ phức tạp thuật toán đệ quy:

 

8 of 12

8

Áp dụng kỹ thuật qui hoạch động để khắc phục tình trạng trên, ta xây dựng một bảng gồm n + 1 hàng (từ 0 đến n) và n + 1 cột (từ 0 đến n) và điền giá trị cho C(i, j) theo qui tắc tam giác Pascal như sau:

i j

0

1

2

3

4

0

1

1

1

1

2

1

2

1

3

1

3

3

1

4

1

4

6

4

1

9 of 12

9

Đánh giá độ phức tạp thuật toán quy hoạch động:

 

10 of 12

10

CÁC ỨNG DỤNG THUẬT TOÁN TRONG ĐỜI SỐNG:

  • Nhiều thuật toán xử lý xâu ký tự, trong đó có bài toán dãy con chung lớn nhất.
  • Thuật toán CYK xác định xem một xâu cho trước có thể được sinh từ một văn phạm phi ngữ cảnh (context-free grammar) như thế nào.
  • The use of transposition tables and refutation tables in computer chess
  • Thuật toán Viterbi
  • Thuật toán Earley
  • Thuật toán Needleman-Wunsch và các thuật toán sắp chuỗi (sequence alignment) khác dùng trong Tin sinh học
  • Levenshtein distance (edit distance)
  • Thuật toán Bellman-Ford
  • Thuật toán Floyd: tìm đường đi ngắn nhất giữa mọi cặp đỉnh
  • Tối ưu hóa thứ tự của phép nhân ma trận theo chuỗi (chain matrix multiplication)
  • Thuật toán tổng tập con (subset sum)
  • Bài toán xếp ba lô (knapsack problem)

11 of 12

11

DEMO CHƯƠNG TRÌNH:

12 of 12

12

CHÚC THẦY CÙNG CÁC ANH CHỊ DỒI DÀO SỨC KHỎE!