You are on page 1of 22

ĐẠ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ỷ
SINH VIÊN THỰC HIỆN:
–NGUYÊN ĐỨC GIANG
–NGUYỄN THỊ LINH
–TRẦN THỊ KIM ANH
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 A1,A2…….,An
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 HÀM(tham số1) HÀM(tham sô 2)
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ố 3)

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 3( TS) HÀM 1( TS )


HÀM(TS)
HÀM1(TS) HÀM2(TS)

HÀM 2(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)
Lưu trong bộ nhớ máy

F(n)=T.F(n-1) F(2)=T.(F(1)=a)

F(n) F(n-1) F(n-2) F(2) F(1)=a

Giá trị
lớn cần trị
tính Giá
neo
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 Khởi


trong vòng lặp và V là các biến tạo
còn lại.
Dạng tổng quát:
while
• W:=W0; Không thỏa điều kiện

{W0=(U0,V0)}
While
C(U) do U:g(W) Các câu lệnh
• Với U0 là trạng thái của U ngay trước
vòng lặp
• Uklà trạng thái của U sau lần lặp thứ k
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 : u1
u2

un
Un+1

ux
NEO

un

u2
U1

vn
v2
v1
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

You might also like