Bài giảng Thuật toán: Chương 5 - GV. Nguyễn Thanh Cẩm
lượt xem 37
download
Chương 5 Thuật toán quay lui thuộc bài giảng thuật toán, cùng nắm kiến thức trong chương này thông qua việc tìm hiểu các nội dung chính sau: thuật toán quay lui, một số bài toán minh họa.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Thuật toán: Chương 5 - GV. Nguyễn Thanh Cẩm
- TRƯỜNG CAO ĐẲNG CNTT HỮU NGHỊ ViỆT - HÀN KHOA KHOA HỌC MÁY TÍNH -----------***----------- THUẬT TOÁN (Algorithms) Nguyễn Thanh Cẩm
- Nội Dung C1 THUẬT TOÁN VÀ ĐỘ PHỨC TẠP C2 CHIA ĐỂ TRỊ C3 QUY HOẠCH ĐỘNG C4 THUẬT TOÁN THAM LAM C5 THUẬT TOÁN QUAY LUI Nguyễn Thanh Cẩm
- THUẬT TOÁN QUAY LUI 5.1 Thuật toán quay lui 5.2 Một số bài toán minh họa Nguyễn Thanh Cẩm
- THUẬT TOÁN QUAY LUI 5.1 Thuật toán quay lui 5.1.1 Đệ quy 5.1.2 Thuật toán quay lui tổng quát Nguyễn Thanh Cẩm
- 5.1 Thuật toán quay lui Quay lui (backtracking) là một chiến lược tìm kiếm lời giải cho các bài toán thỏa mãn ràng buộc. Người đầu tiên đề ra thuật ngữ này (backtrack) là nhà toán học người Mỹ D. H. Lehmer vào những năm 1950. Nguyễn Thanh Cẩm
- 5.1.1 Đệ quy Thí dụ 1: Tìm thuật toán đệ quy tính giá trị an với a là số thực không âm và n là số nguyên không âm. Thuật toán đệ quy tính an. float power (a: float; n: int); { if (n = 0) power(a, n) = 1 else power(a, n) = a*power(a, n-1) } Nguyễn Thanh Cẩm
- 5.1.1 Đệ quy Thí dụ 2: Tìm thuật toán đệ quy tính UCLN của hai số nguyên a, b không âm và a < b. Thuật toán đệ quy tính UCLN(a, b) int UCLN(int a, int b); { if (a = 0) UCLN(a, b) = b else UCLN(a,b) = UCLN(b mod a,a) } Nguyễn Thanh Cẩm
- 4.1.2 Thuật toán quay lui tổng quát Thuật toán quay lui dùng để giải bài toán liệt kê các cấu hình. Mỗi cấu hình được xây dựng bằng cách xây dựng từng phần tử, mỗi phần tử được chọn bằng cách thử tất cả các khả năng. Nguyễn Thanh Cẩm
- 4.1.2 Thuật toán quay lui tổng quát Giả thiết cấu hình cần liệt kê có dạng (x1, x2, …, xn). Khi đó thuật toán quay lui thực hiện các bước sau: Xét tất cả các giá trị x1 có thể nhận, thử cho x1 nhận lần lượt các giá trị đó. Với mỗi giá trị thử gán cho x1 ta sẽ: Xét tất cả các giá trị x2 có thể nhận, lại thử cho x2 nhận lần lượt các giá trị đó. Với mỗi giá trị thử gán cho x2 lại xét tiếp các khả năng chọn x3… cứ tiếp tục như thế đến bước: Xét tất cả các giá trị xn có thể nhận, thử cho xn nhận lần lượt các giá trị đó, thông báo cấu hình tìm được (x1, x2, …, xn). Trên phương diện quy nạp, có thể nói rằng thuật toán quay lui liệt kê các cấu hình n phần tử dạng (x1, x2, …, xn) bằng cách thử cho x1 nhận lần lượt các giá trị có thể. Với mỗi giá trị gán cho x1 lại liệt kê tiếp cấu hình n -1 phần tử (x2, x3, …, xn). Nguyễn Thanh Cẩm
- 4.1.2 Thuật toán quay lui tổng quát Mô hình của thuật toán quay lui có thể mô tả như sau: Void Try(int i) { For (mọi giá trị V có thể gán cho xi) { ; If (xi là phần tử cuối cùng trong cấu hình) Else { ; Try(i + 1); ; } } } Nguyễn Thanh Cẩm
- 5.1.2 Thuật toán quay lui tổng quát Ta có thể trình bày quá trình tìm kiếm lời giải của thuật toán quay lui bằng cây sau: Nguyễn Thanh Cẩm
- THUẬT TOÁN QUAY LUI 5.2 Một số bài toán minh họa 5.2.1 Bài toán liệt kê dãy nhị phân độ dài n 5.2.2 Bài toán liệt kê các tập con k phần tử 5.2.3 Bài toán xếp hậu 5.2.4 Bài toán tô màu đồ thị Nguyễn Thanh Cẩm
- 5.2.1 Bài toán liệt kê dãy nhị phân độ dài n Biểu diễn nhị phân độ dài N dưới dạng (x1,x2, …, xn). Ta sẽ liệt kê các dãy này bằng cách thử dùng các giá trị (0, 1) gán cho xi. Với mỗi giá trị thử gán cho xi lại thử các giá trị có thể gán cho xi+1. Chương trình liệt kê bằng thuật toán quay lui có thể viết như dưới đây: Nguyễn Thanh Cẩm
- 5.2.1 Bài toán liệt kê dãy nhị phân độ dài n Thuật toán liệt kê các phần tử nhị phân void Try(int i) { int j; For (j = 0;j
- 5.2.1 Bài toán liệt kê dãy nhị phân độ dài n Mô tả bằng cây: Ví dụ: khi n = 3, cây tìm kiếm quay lui như sau: Nguyễn Thanh Cẩm
- THUẬT TOÁN QUAY LUI 5.2 Một số bài toán minh họa 5.2.1 Bài toán liệt kê dãy nhị phân độ dài n 5.2.2 Bài toán liệt kê các tập con k phần tử 5.2.3 Bài toán xếp hậu 5.2.4 Bài toán tô màu đồ thị Nguyễn Thanh Cẩm
- 5.2.2 Bài toán liệt kê các tập con k phần tử Để liệt kê các tập con k phần tử của tập S = {1, 2,… , n}, ta có thể đưa về liệt kê các cấu hình (x1, x2, …, xk). Ở đây các và x1 < x2 < … < xk. Ta có nhận xét: xk ≤ n xk-1 ≤ xk – 1 ≤ n –1 … xi ≤ n – k +i … x1 ≤ n – k +1. Từ đó suy ra xi-1 + 1 ≤ xi ≤ n – k + i (1≤ i ≤ k), ở đây ta giả thiết có thêm một số x0 = 0 khi xét i = 1. Nguyễn Thanh Cẩm
- 5.2.2 Bài toán liệt kê các tập con k phần tử Như vậy ta sẽ xét tất cả các cách: Chọn x1 từ 1(= x0 +1) đến n-k+1, với mỗi giá trị đó, xét tiếp tất cả các cách Chọn x2 từ x1+1 đến n-k+2,… Cứ như vậy khi chọn được đến xk thì ta có một cấu hình cần liệt kê. Nguyễn Thanh Cẩm
- 5.2.2 Bài toán liệt kê các tập con k phần tử Thuật toán quay lui liệt kê các tập con k phần tử: void Try( int i) { int j; For (j = x[i-1] + 1; j
- THUẬT TOÁN QUAY LUI 5.2 Một số bài toán minh họa 5.2.1 Bài toán liệt kê dãy nhị phân độ dài n 5.2.2 Bài toán liệt kê các tập con k phần tử 5.2.3 Bài toán xếp hậu 5.2.4 Bài toán tô màu đồ thị Nguyễn Thanh Cẩm
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu & thuật toán: Chương 5 - Nguyễn Đức Nghĩa
0 p | 340 | 138
-
Phân tích và thiết kế giải thuật: Các kỹ thuật thiết kế giải thuật - Chương 5
0 p | 203 | 90
-
Bài giảng An toàn cơ sở dữ liệu: Chương 5 - Trần Thị Lượng
57 p | 187 | 41
-
Bài giảng An toàn thông tin - Chương 5: Hàm băm một chiều và các thuật giải chữ ký số"
31 p | 170 | 30
-
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 5 - Nguyễn Khánh Phương
181 p | 56 | 22
-
Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 5: Ngăn xếp – hàng đợi
88 p | 120 | 21
-
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương giới thiệu - Nguyễn Khánh Phương
8 p | 80 | 21
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - ĐH Bách khoa TP. HCM
28 p | 95 | 8
-
Bài giảng An toàn thông tin: Chương 5 - ThS. Nguyễn Thị Phong Dung
20 p | 21 | 8
-
Tập bài giảng Thiết kế và đánh giá thuật toán
200 p | 47 | 8
-
Bài giảng Thuật toán nâng cao: Chương 5 - Nguyễn Thanh Bình
20 p | 80 | 6
-
Bài giảng Nhập môn lập trình: Chương 2 - Trường Đại học Ngoại ngữ - Tin học, TP.HCM
71 p | 12 | 6
-
Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 5 - Trịnh Anh Phúc
99 p | 28 | 5
-
Bài giảng Nhập môn điện toán: Chương 5 - ĐH Bách khoa TP.HCM
82 p | 83 | 5
-
Bài giảng Toán rời rạc (Phần II: Lý thuyết đồ thị): Chương 5 - Nguyễn Đức Nghĩa
78 p | 93 | 5
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Ths. Phạm Thanh An (2018)
53 p | 65 | 4
-
Bài giảng An toàn dữ liệu và mật mã: Chương 5 - Trường ĐH Nguyễn Tất Thành
29 p | 6 | 4
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn