Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 2: Thuật toán đệ qui cung cấp cho người đọc các kiến thức: Khái niệm đệ qui, thuật toán đệ qui, phân tích thuật toán đệ qui, chứng minh tính đúng đắn của thuật toán đệ qui,... Mời các bạn cùng tham khảo.
Chương 2: Thuật toán đệ quy Trịnh Anh Phúc, Nguyễn Đức Nghĩa Bộ mơn Khoa Học Máy Tính, Viện CNTT & TT, Trường Đại Học Bách Khoa Hà Nội Ngày 13 tháng năm 2014 ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà13Nội tháng ) năm 2014 / 63 Giới thiệu Khái niệm đệ quy Hàm đệ qui Tập hợp xác định đệ qui Thuật tốn đệ qui Một số ví dụ minh họa Phân tích thuật tốn đệ qui Chứng minh tính đắn thuật tốn đệ qui Thuật toán quay lui Bài toán xếp hậu Bài toán mã tuần ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà13Nội tháng ) năm 2014 / 63 Khái niệm đệ quy Thuật toán đệ qui Khái niệm đệ qui Trong thực tế thường gặp đối tượng đệ quy bao gồm định nghĩa Ta nói đối tượng xác định cách đệ qui Điểm quân số Các hàm định nghĩa đệ qui Tập hợp định nghĩa đệ qui Định nghĩa đệ qui Fractal ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà13Nội tháng ) năm 2014 / 63 Khái niệm đệ quy Hàm đệ qui Hàm đệ qui (resursive functions) Định nghĩa Các hàm đệ qui xác định số nguyên không âm n theo sơ đồ Bước sở (Basic step) : Xác định giá trị hàm thời điểm n = hay f (0) Bước đệ qui (Recursive step) : Cho giá trị hàm f (k) k ≤ n đưa qui tắc tính giá trị f (n + 1) ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà13Nội tháng ) năm 2014 / 63 Khái niệm đệ quy Hàm đệ qui Hàm đệ qui (resursive functions) VD1 : f (0) = n = f (n + 1) = 2f (n) + n > VD2 : f (0) = f (n + 1) = f (n) × (n + 1) VD3 : Định nghĩa đệ qui tổng sn = n i=1 s = sn = sn−1 + an ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà13Nội tháng ) năm 2014 / 63 Khái niệm đệ quy Tập hợp xác định đệ qui Tập hợp xác định đệ qui Định nghĩa Tập hợp xác định đệ qui theo sơ đồ tương tự hàm đệ qui Bước sở : Định nghĩa tập sở Bước đệ qui : Xác định qui tắc để sản sinh tập từ tập có ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà13Nội tháng ) năm 2014 / 63 Khái niệm đệ quy Tập hợp xác định đệ qui Tập hợp xác định đệ qui (tiếp) VD1 : Xét tập S đc định nghĩa đệ qui sau Bước sở : phần tử tập S Bước đệ qui : Nếu x thuộc S y thuộc S x + y thuộc S Vậy tập S có phân tử đc tạo cách đệ qui 3, 3+3 = 6, 3+6 = 9, 6+6 = 12, · · · VD2 : Định nghĩa đệ qui xâu sau : = Bảng chữ (alphabet) tập ∗ xâu (string) bảng chữ A đc định nghĩa đệ qui sau : ∗ Bước sở : Xâu rỗng phần tử ∗ Bước đệ qui : Nếu w thuộc x thuộc A → wx thuộc Chẳng hạn tập xâu nhị phân B thu từ xâu rỗng, , 1, 00, 01, 10, 11 ng.com ∗ = {0, 1} bắt đầu https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà13Nội tháng ) năm 2014 / 63 Khái niệm đệ quy Tập hợp xác định đệ qui Tập hợp xác định đệ qui (tiếp) VD3 : Cơng thức tốn học Một cơng thức hợp lệ biến, số phép toán từ tập {+,-,*,/} định nghĩa đệ qui sau Bước sở : x công thức hợp lệ x biến số Bước đệ qui : Nếu f , g cơng thức hợp lệ (f + g ), (f − g ), (f ∗ g ), (f /g ) công thức hợp lệ Ta có cơng thức hợp lệ sau (x-y) ((z/3)-y),((z/3) - (6+5)) ((z/3)-(6+5)) ((z/(2*3)) - (6+5)) ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà13Nội tháng ) năm 2014 / 63 Khái niệm đệ quy Tập hợp xác định đệ qui Tập hợp xác định đệ qui (tiếp) VD4 : Cây có gốc r định nghĩa đệ qui sau Bước sở : Một nút có gốc r Bước đệ qui : Giả sử T1 , T2 , · · · , Tk với gốc r1 , · · · , rk Vậy ta nối gốc tạo r với số gốc r1 , · · · , rk cạnh tương ứng, ta lại thu có gốc r r r1 r2 rk T1 T2 ng.com Tk https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa Ngày Hà13Nội tháng ) năm 2014 / 63 Thuật toán đệ qui Khái niệm đệ quy Hàm đệ qui Tập hợp xác định đệ qui Thuật toán đệ qui Một số ví dụ minh họa Phân tích thuật tốn đệ qui Chứng minh tính đắn thuật toán đệ qui Thuật toán quay lui Bài toán xếp hậu Bài toán mã tuần ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 13 Nội tháng) năm 2014 10 / 63 Thuật toán quay lui Thuật toán quay lui (tiếp) Các bước chung thuật toán quay lui (tiếp) bước tổng qt : Có hai tình xảy tình : Sk = ∅ lấy ak ∈ Sk , bổ sung vào lời giải phận cấp k − có thu lời giải phận cấp k (a1 , a2 , · · · , ak ) k = n, ta thu lời giải chấp nhận k < n, ta tiếp tục xây dựng lời giải phận cấp k + tình : Sk = ∅ tình ngõ cụt Do khơng thể tìm phát triển thành lời giải đầy đủ, ta phải quay lui để tìm UCV vào vị trí k − lời giải Nếu tìm thấy UCV bổ sung vào vị trí k − tiếp tục xây dựng thành phần k Nếu khơng tìm thấy ta phải quay lui để tìm UCV vào vị trí k − 2, · · · Nếu quay lại tận lời giải rỗng mà khơng tìm đc UCV vào vị trí thuật tốn kết thúc (bài tốn vơ nghiệm) ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 13 Nội tháng) năm 2014 49 / 63 Thuật toán quay lui Thuật toán quay lui (tiếp) Thủ tục đệ qui thuật toán quay lui Procedure Backtrack(k) Xây dựng Sk for y ∈ Sk /* với UCV y từ Sk */ ak ← y if (k=n) then else Backtrack(k+1) endif endfor End Lệnh gọi ban đầu giải thuật Backtrack(1) ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 13 Nội tháng) năm 2014 50 / 63 Thuật toán quay lui Thuật toán quay lui (tiếp) Hai vấn đề mấu chốt thuật toán quay lui Để cài đặt thuật toán quay lui giải toán cụ thể, ta cần giải hai vấn đề sau Tìm thuật tốn xây dựng tập UCV bước k Sk Tìm cách mơ tả tập để cài đặt thao tác liệt kê phần tử vòng lặp for bước hiệu thuật toán liệt kê phụ thuộc vào việc ta có xác định xác tập UCV hay không ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 13 Nội tháng) năm 2014 51 / 63 Thuật toán quay lui Thuật toán quay lui (tiếp) Các lưu ý Nếu cần tìm lời giải (chấp nhận được) cần tìm cách chấm dứt thủ tục gọi đệ qui lồng sinh lệnh gọi Backtrack(1) sau ghi nhận lời giải Nếu kết thúc thuật tốn mà khơng thu lời giải có nghĩa tốn khơng có lời giải Thuật toán dễ dàng mở rộng cho toán liệt kê với chiều dài hữu hạn không thiết độ dài n Lúc câu lệnh bước đc sửa thành if then ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 13 Nội tháng) năm 2014 52 / 63 Thuật toán quay lui Bài toán xếp hậu Khái niệm đệ quy Hàm đệ qui Tập hợp xác định đệ qui Thuật tốn đệ qui Một số ví dụ minh họa Phân tích thuật tốn đệ qui Chứng minh tính đắn thuật tốn đệ qui Thuật toán quay lui Bài toán xếp hậu Bài toán mã tuần ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 13 Nội tháng) năm 2014 53 / 63 Thuật toán quay lui Bài toán xếp hậu Thuật toán quay lui (tiếp) Phát biểu toán xếp hậu Liệt kê tất cách xếp n quân hậu bàn cờ n × n cho chúng không ăn lẫn - khơng có hai nằm dịng, cột hay đường chéo ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 13 Nội tháng) năm 2014 54 / 63 Thuật toán quay lui Bài toán xếp hậu Thuật toán quay lui (tiếp) Biểu diễn toán xếp hậu Đánh số cột dòng bàn cờ từ đến n Một cách xếp hậu biểu diễn (a1 , a2 , · · · , an ) tọa độ cột hậu dòng i Các điều kiện đặt với (a1 , a2 , · · · , an ) = aj với i = j (hai hậu nằm hai dịng i j khơng cột) |ai − aj | = |i − j| (không nằm đường chéo) ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ mơn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 13 Nội tháng) năm 2014 55 / 63 Thuật toán quay lui Bài toán xếp hậu Thuật toán quay lui (tiếp) Biểu diễn toán xếp hậu (tiếp) Như toán dẫn toán liệt kê D = {(x1 , x2 , · · · , xn ) ∈ N n : = aj |ai − aj | = |i − j|, i = j} ng.com https://fb.com/tailieudientucntt Trịnh Anh Phúc ( Bộ môn Khoa Học Máy Tính, ViệnCấu CNTT trúc&dữTT, liệu Trường giải thuật Đại Học Bách Khoa NgàyHà 13 Nội tháng) năm 2014 56 / 63 Thuật toán quay lui Bài toán xếp hậu Thuật toán quay lui (tiếp) Hàm nhận biết UCV Mã nguồn ngôn ngữ C int UCVh(int j, int k){ // UCVh nhận giá trị // j ∈ Sk int i; for(i=1;i