Giáo án ppt chuyên đề KHMT 11 kết nối: Bài 13 Kĩ thuật duyệt quay lui
Giáo án ppt chuyên đề Tin học khoa học máy tính 11 kết nối tri thức: Bài 13 Kĩ thuật duyệt quay lui. Bài giảng thiết kế hiện đại, sáng tạo giúp tiết học thêm phần thú vị, giúp giáo viên tiết kiệm thời gian nhưng vẫn có thể ứng dụng công nghệ vào công tác giảng dạy.
Nội dung chi tiết











... Còn nữa ...
CHÀO MỪNG CÁC EM ĐẾN VỚI BÀI HỌC MỚI!
KHOA HỌC MÁY TÍNH
KHỞI ĐỘNG
[…] Bài toán tìm đường đi trong mê cung lần đầu tiên được đưa ra trong cuốn sách Récréations Mathématiques của tác giả Édouard Lucas năm 1882 tại Pháp. Cũng trong cuốn sách đó Lucas đã đưa ra bản phác thảo đầu tiên của một phương pháp giải bài toán đường đi trong mê cung mà bây giờ chúng ta gọi là thuật toán duyệt quay lui, hay đơn giản là thuật toán quay lui (backtracking).
Trong trò chơi mê cung em cần tìm một đường đi xuất phát từ lối vào và ra khỏi mê cung tại lối ra. Em có đề xuất gì để giải bài toán này?
BÀI 13: KĨ THUẬT
DUYỆT QUAY LUI
NỘI DUNG BÀI HỌC
1
Kĩ thuật duyệt quay lui
2
Mô hình tổng quát của thuật toán duyệt quay lui
3
Bài toán sinh xâu nhị phân
KĨ THUẬT DUYỆT QUAY LUI
1
Hoạt động 1
Tìm hiểu ý tưởng của thuật toán quay lui
Đọc, trao đổi và thảo luận về ý tượng thuật toán quay lui của bài toán tìm đường đi trong mê cung.
- Xuất phát từ vị trí gốc, thuật toán sẽ gọi hàm tìm bước đi tiếp theo.
- Nếu thực hiện được một bước đi thì gọi lại hàm để tìm bước đi tiếp theo.
- Nếu không tìm thấy đường đi thì cần "quay lui" về vị trí trước đó để tìm đường đi khác.
- Thuật toán sẽ sử dụng kĩ thuật đệ quy khi gọi hàm cho bước đi tiếp theo.
Luôn tìm cách đi tiếp theo
1 Tìm kiếm bước đi tiếp theo //<hàm> 2 Nếu vị trí hiện thời là đích 3 Thông báo tìm thấy nghiệm 4 Dừng chương trình 5 Lặp trên tập hợp các khả năng có thể đi tiếp 6 Nếu bước đi là khả thi 7 Thực hiện bước đi cụ thể từ vị trí hiện thời 8 Cập nhật thông tin vào bước đi 9 Tìm kiếm bước đi tiếp theo 10 Xóa thông tin bước đi và quay lại trạng thái trước |
Sơ đồ mã giả của thuật toán quy lui
GIẢI THÍCH
Hàm có chức năng tim bước đi tiếp theo xuất phát từ <vị trí> hiện thời.
Nếu vị trí hiện thời là đích thì thông báo tìm thấy nghiệm tại dòng 3 và dừng chương trình. Dòng 5 sẽ tìm tất cả các phương án có thể đi tiếp.
- Nếu tìm thấy một phương án đi khả thi tại dòng 6 thì thực hiện ngay bước đi này tại dòng 7 để cập nhật thông tin vào <vị trí> mới.
- Sau gọi đệ quy lại hàm gốc để đi tiếp tại dòng 9.
Nếu không thể đi tiếp (lệnh gọi đệ quy dòng 9 không thể thực hiện) thì quay lui tại dòng 10, xoá thông tin bước vừa đi để quay lại vòng lặp 5.
KẾT LUẬN
Ý tưởng của thuật toán quay lui là thiết lập một hàm (thủ tục) xuất phát từ một vị trí hiện thời để tìm kiếm các bước đi tiếp theo.
Đọc thông tin và trả lời các câu hỏi sau đây:
- Câu 1: Khi đã thực hiện hết các bước lặp tại dòng 2 ở trên thì hàm có dừng không?
- Câu 2: Lệnh gọi hàm chính của chương trình trên là gì?
- Câu 3: Nếu yêu cầu bổ sung thêm 1 lệnh “Nếu thấy <lối ra> thì thông báo và dừng chương trình” thì lệnh này sẽ đặt ở đâu trong chương trình trên?
TRẢ LỜI CÂU HỎI
1
Có. Khi thực hiện xong vòng lặp tại dòng 5 thì hàm sẽ dừng. Có nghĩa là từ vị trí hiện thời sẽ không thể đi tiếp được nữa, cần “quay lui".
2
Lệnh gọi hàm chính là "Tìm bước đi tiếp theo.
3
Lệnh này đã có chính là dòng lệnh 2.
MÔ HÌNH TỔNG QUÁT CỦA THUẬT TOÁN DUYỆT QUAY LUI
2
Hoạt động 2
Tìm hiểu mô hình tổng quát của kĩ thuật duyệt quay lui
Quan sát, thực hiện và thảo luận các bước thiết kế mô hình tổng quát của kĩ thuật duyệt quay lui.
Mô hình tổng quát duyệt quay lui sử dụng đệ quy
1 def Backtracking ([x1,x2,…,xk-1],k): 2 if (x1,x2,…,xk-1) là nghiệm: 3 Lưu và thông báo nghiệm 4 Tính toán Sk theo (x1,x2,..,xk-1) 5 for xk in Sk: #Duyệt theo thứ tự của Sk 6 Backtracking ([x1,x2,…,xk], k+1) |
Lệnh gọi hàm gốc
| Backtracking ([],0) |
GIẢI THÍCH
Lưu ý: Vòng lặp for tại dòng 5 sẽ thực hiện duyệt theo thứ tự các phần tử đang có của S Như vậy, yêu cầu các tập hợp D, phải được sắp thứ tự trước.
KẾT LUẬN
Đọc thông tin và trả lời các câu hỏi sau đây:
- Câu 1: Trạng thái "quay lui" của thuật toán trên nằm ở đâu?
- Câu 2: Có cách nào đếm được tất cả các nghiệm từ thuật toán trên được không? Nếu có thì làm cách nào?
TRẢ LỜI CÂU HỎI
1
Trạng thái "quay lui” của thuật toán nằm ở sau dòng lệnh 6, khi kết thúc Backtracking() thì cần “quay lui” để quay lại vòng lặp tiếp theo của lệnh for, tại dòng 5.
2
Có. Cần bổ sung một biến tổng thể, ví dụ count, biến này sẽ được tự động tăng lên 1 đơn vị sau lệnh 3, bên trong lệnh if.
BÀI TOÁN SINH XÂU NHỊ PHÂN
3
Hoạt động 3
Thiết kế chương trình sinh tất cả các dãy nhị phân
Cùng thực hiện, trao đổi, thảo luận thiết kế chương trình sinh tất cả các dãy nhị phân độ dài n bằng kĩ thuật quay lui.
Để thiết kế chương trình sinh tất cả các dãy nhị phân độ dài n bằng kĩ thuật quay lui, ta có thể sử dụng đệ quy để thêm lần lượt các số 0 và 1 vào dãy nhị phân.
1
Viết hàm để sinh dãy nhị phân độ dài n:
def generate_binary_sequence(n, sequence=[]): if n == 0 print(sequence) else: sequence.append(0) generate_binary_sequence(n-1, sequence) sequence.pop()
sequence.append(1) generate_binary_sequence(n-1, sequence) sequence.pop() |
2
Gọi hàm generate_binary_sequence với độ dài của dãy nhị phân cần sinh:
| generate_binary_sequence(3) |
[0, 0, 0] [0, 0, 1] [0, 1, 0] [0, 1, 1] [1, 0, 0] [1, 0, 1] [1, 1, 0] [1, 1, 1] |
Kết quả
Chương trình 1
1 def genBinary(A,k): 2 if k == n: 3 print(A) 4 else: 5 for i in range(2): 6 A[k] = i 7 genBinary (A,k + 1) |
1 n = 4 2 A = [0]*n 3 GenBinary(A,0) |
Lời gọi hàm chính
Chương trình 2
1 def genBinary(A,k): 2 if k == n: 3 print(A) 4 else: 5 for i in range(2): 6 A.append(i) 7 genBinary (A,k + 1) 8 A.pop(). |
1 n = 4 2 GenBinary([],0) |
Lời gọi hàm chính
KẾT LUẬN
--------------- Còn tiếp ---------------
Tài liệu cùng môn học
- Trắc nghiệm khoa học máy tính 11 kết nối tri thức
- Giáo án word tin học khoa học máy tính 11 kết nối tri thức
- Giáo án ppt tin học khoa học máy tính 11 kết nối tri thức
- Giáo án chuyên đề tin học khoa học máy tính 11 kết nối tri thức
- Giáo án ppt chuyên đề tin học khoa học máy tính 11 kết nối tri thức
- Giải tin học khoa học máy tính 11 kết nối tri thức
- Phiếu bài tập tin học khoa học máy tính 11 kết nối tri thức
- Lý thuyết khoa học máy tính 11 kết nối tri thức
- Bài tập củng cố Khoa học máy tính 11 kết nối tri thức
- Trắc nghiệm trả lời ngắn khoa học máy tính 11 kết nối tri thức
- Trắc nghiệm đúng sai khoa học máy tính 11 kết nối tri thức
- Đề thi tin học khoa học máy tính 11 kết nối tri thức
- Giải chuyên đề khoa học máy tính 11 kết nối tri thức
- Ppt trò chơi AI Tin học KHMT 11 Kết nối tri thức
- Ppt trò chơi AI Tin học 11 Khoa học máy tính Kết nối tri thức
- Video AI mở đầu Tin học 11 Khoa học máy tính Kết nối tri thức
Tài liệu khác
- Trắc nghiệm văn 11 kết nối tri thức
- Trắc nghiệm địa lí 11 kết nối tri thức
- Trắc nghiệm hóa học 11 kết nối tri thức
- Trắc nghiệm KTPL 11 kết nối tri thức
- Trắc nghiệm lịch sử 11 kết nối tri thức
- Trắc nghiệm sinh học 11 kết nối tri thức
- Trắc nghiệm toán 11 kết nối tri thức
- Trắc nghiệm quốc phòng 11 kết nối tri thức
- => Xem nhiều môn hơn