Tải bản đầy đủ (.ppt) (22 trang)

BÀI TẬP LỚN TỔNG QUAN VỀ KỸ THUẬT ĐỆ QUY

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (199.8 KB, 22 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
ĐẠI HỌC KHOA HỌC TƯ NHIÊN
BÀI TẬP LỚN
TỔNG QUAN VỀ KỸ THUẬT
ĐỆ QUY
GIẢNG VIÊN : Nguyễn Bích Thuỷ
Lớp K52A3,Toán-Tin ứng dụng
M c l cụ ụ

GIỚI THIỆU CHUNG VỀ KỸ THUẬT ĐỆ QUY

KỸ THUẬT ĐỆ QUY.

Khái niệm kỹ thuật đệ quy, các loại đệ quy.

Khái niệm đệ quy.

Phương pháp sử dụng kỹ thuật đệ quy trong một bài toán.

Cơ chế thực hiện giải thuật đệ quy.

Ví dụ minh họa

KHỬ ĐỆ QUY.

Tổng quan về vấn đề giải thuật đệ quy.

Các trường hợp khử đệ quy đơn giản.

Ví dụ minh họa.


TỔNG KẾT.
Khái niệm đệ quy

Là phương pháp dùng trong các chương trình máy tính trong đó có hàm
có lệnh gọi lại chính hàm đó.
VD: int giaithua(int n)
{ if(n==0||n==1) return 1;
else return n*giaithua(n-1);
}
Cấu trúc đệ quy đầy đủ:

Phần neo : là phần không đệ quy, có thể biết được giá trị của nó.

VD tính giai thừa của số tự nhiên n:
0!=1; 1!=1; là trường hợp suy biến

Phần quy nạp: phần chứa câu lệnh gọi lại hàm đó
VD: n!=n*(n-1)!;
Các loại đệ quy
Phân loại theo cách mô tả đệ quy:

Đệ quy trực tiếp là loại đệ quy mà đối tượng được mô tả trực tiếp qua
nó: A mô tả qua A,B,C…trong đó B,C,…không chứa A.

Đệ quy gián tiếp là loại đệ quy mà đối tượng được mô tả gián tiếp qua
nó:A mô tả qua A
1
,A
2
…….,A

n
Các loại đệ quy( tiếp)
Phân loại theo cách gọi hàm
a) Đệ quy tuyến tính
Trong thân hàm có duy nhất
một lời gọi hàm gọi lại chính
nó một cách tường minh.
b) Đệ quy nhị phân
Trong thân của hàm có hai lời
gọi hàm gọi lại chính nó một
cách tường minh.
HÀM(tham sô 2)HÀM(tham số1)
HÀM ( tham số 2)
HÀM( tham số 3)

HÀM( tham sô 1)
Các loại đệ quy
c)Đệ quy phi tuyến
Trong thân hàm này có lời gọi hàm gọi lại chính nó đặt bên trong vòng
lặp.
d) Đệ quy hỗ tương
Trong thân hàm này có lời gọi hàm đến hàm kia và ngược lại.
HÀM 1( TS )
HÀM 2(TS )
HÀM 3( TS)
HÀM(TS)
HÀM1(TS)
HÀM2(TS)
Phương pháp sử dụng kỹ thuật
đệ quy

Thông số hóa bài toán
Tìm các trường hợp neo cùng giải thuật giải tương ứng
Tìm giải thuật trong trường hợp tổng quát bằng phân rã
bài toán theo kiểu đệ quy
Cơ chế thực hiện giải thuật
đệ quy
Tổng quát :Hàm fuction F(TS)
F(n) F(n-1) F(n-2)
F(2)
F(1)=a
G
i
á

t
r


l

n

c

n

t
í
n
h

G
i
á

t
r


n
e
o
F(n)=T.F(n-1) F(2)=T.(F(1)=a)
Lưu trong bộ nhớ máy
Bài toán tháp Hà Nội

Input: n: số đĩa cần chuyển từ cột A->C qua trung gian
B

Output: in ra cách di chuyển n đĩa
A-Nguồn B-TG C-ĐÍCH
Bài toán tháp Hà Nội
1. Phân tích:
Xét: hàm THN(char A;charB;char C;int n) hàm xử lý chương trình
Move(char A,char C): phép di chuyển cơ bản từ A->C

Thông số bài toán: xét bài toán ở mức độ tổng quát THN(A,B,C,n)

Trưòng hợp suy biến và cách giải

n=0: TNH(A,B,C,0)={Φ}


N=1: THN(A,B,C,1)=Move(a,c)

Phân rã bài toán chuyển n (n>0) đĩa từ cột A sang cột C lấy cột B làm trung gian

Chuyển (k-1) đĩa từ cột A sang cột B lấy C làm trung gian
THN(k-1,A,C,B)

Chuyển 1 đĩa từ cột A sang cột C: move(A,C);

Chuyển (k-1) đĩa từ cột B sang cột C lấy A làm trung gian
THN(k-1,B,A,C)
Vậy giải thuật trong trương hợp tổng quát (n>1) là:
Code
Chuong trinh
web
Tiêu chí sử dụng kỹ thuật
đệ quy

Tiêu chí

Thực hiện lại một khối việc tương tự

Phải có điểm kết thúc.

Thường Áp dụng cho:

Bài toán tìm kiếm, liệt kê ( đối tượng có tích chất tương đồng)

Bài toán tối ưu hóa;


Bài toán tìm đường đi, chu trình. Vd: halminton
Lưu ý:
1.đệ qui sử dụng bộ nhớ kiểu LIFO chứa kết quả trung gian và do
đó thận trọng lường trước việc kết thúc quá trình đệ qui.
2.Tránh dùng đệ qui khi có thể dùng phép lặp tính toán
Nhận xét về kỹ thuật đệ quy
Ưu điểm
Điểm mạnh lớn nhất: làm chương trình, code, trở lên ngắn gọn.
Dễ chuyển thành chương trình trên các ngôn ngữ lập trình.
Nhược điểm
Nhược điểm lớn nhất là tốn bộ nhớ,
Mất nhiều thời gian xử lý, làm giảm tốc độ chạy chương trình.
Không áp dụng cho mọi ngôn ngữ lập trình.
BACK
KHỬ ĐỆ QUY

Tổng quan về vấn đề giải thuật đệ quy
Giải thuật giải bài toán bằng đệ quy thường rất đẹp, nhưng…

Các trường hợp khử đệ quy đơn giản.

Khử đệ quy bằng vòng lặp.

Khử đệ quy hàm đệ quy arsac.

Khử đệ quy bằng các phương pháp khác
Khử đệ quy bằng vòng lặp

W(V,U) với U là các biến thay đổi

trong vòng lặp và V là các biến
còn lại.
Dạng tổng quát:

W:=W
0
;
{W
0
=(U
0
,V
0
)}
While
C(U) do U:g(W)

Với U
0
là trạng thái của U

ngay trước
vòng lặp

U
k
là trạng thái của U sau lần lặp thứ k
Khởi
tạo
Các câu lệnh

Không thỏa điều kiện
while
Khái niệm hàm
ARSAC
Dạng mã giả:
A(X)=if (C(X))
return( DS (A(CS(X)) ,FS(CS(X),X) )
else (return (BS(X ) )
Trong đó DS,FS,BS,CS là các giải thuật không đệ quy.

BS(X) , CS(Y) , DS(U,V) , FS(U,V) là các hàm đơn giản không có lệnh gọi
hàm con.

X,Y,U,V là các biến véc tơ hoặc các biến đơn trị.


Cơ chế hàm arsac :
u
1
u
x
u
n
u
2
U
n+1
v
n
v

2
v
1
U
1
u
2
u
n
NEO
Ví dụ về khử đệ quy
{
creatstack S;
Push (S ,(n,X,Y,Z,1)) ;
While ( n > 0 )
{ Push (S ,(n,X,Y,Z,2)) ;
n := n - 1 ;
Swap (Y,Z ) ; (* Swap(a,b)là thủ tục hoán đổi nội dung 2 biến a,b)
dữ liệu từ ví trí thứ k của stack (S,(n,X,Y,Z,k)) ;
if ( k > 1 ) { //Hàm di chuyển đĩa từ cột đầu X đến cột cuối Z ;
n := n - 1 ;
Swap (X ,Y ) ;
}
( k = 1 ) ;
}
}
Tổng kết về kỹ thuật đệ
quy

Đệ quy cung cấp cho ta cơ chế giải quyết

bài toán phức tạp một cách đơn giản

Xây dựng đệ quy thông qua việc xác định
điều kiện dừng và bước thực hiên tiếp
theo

Chỉ nên cài dặt phương pháp đệ quy khi
không còn cách giải quyết bằng cách lặp
thông thường
Thank you for listening

×