Bài giảng Phân tích và thiết kế thuật toán - Phạm Thế Bảo - Chương 3: Đệ quy và đánh giá

–Phần cơsở:

Làcáctrườnghợpkhôngcầnthựchiệnlại thuật

toán (không yêu cầugọi đệquy). Nếuthuậttoánđệ

quy không có phầnnàythìsẽbị lặpvôhạnvàsinh

lỗi khi thựchiện.Đôi lúc gọilàtrường hợpdừng.

–Phần đệquy:

Làphầntrongthuậttoáncóyêucầugọiđệquyyêu

cầuthựchiệnthuậttoánởmộtcấpđộthấphơn.

pdf9 trang | Chuyên mục: Phân Tích & Thiết Kế Thuật Toán | Chia sẻ: dkS00TYs | Lượt xem: 2032 | Lượt tải: 5download
Tóm tắt nội dung Bài giảng Phân tích và thiết kế thuật toán - Phạm Thế Bảo - Chương 3: Đệ quy và đánh giá, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
27/03/2008
1
ĐỆ QUY VÀ ĐÁNH GIÁ
Phạm Thế Bảo
Khoa Toán – Tin học 
Trường Đại học Khoa học Tự nhiên Tp.HCM
• Là mở rộng cơ bản nhất của khái niệm thuật toán.
• Tư tưởng giải bài toán bằng đệ quy là đưa bài toán
hiện tại về một bài toán cùng loại, cùng tính chất
Thuật toán đệ quy
(đồng dạng) nhưng ở cấp độ thấp hơn, quá trình này
tiếp tục cho đến khi bài toán được đưa về một cấp độ
mà tại đó có thể giải được. Từ cấp độ này ta lần ngược
để giải các bài toán ở cấp độ cao hơn cho đến khi giải
xong bài toán ban đầu.
• Ví dụ:
– định nghĩa giai thừa: n!=n*(n-1)! với 0!=1
– Dãy Fibonacci: f0=1, f1=1 và fn =fn-1+fn-2 ∀n>1
– Danh sách liên kết.
– ... Phạm Thế Bảo
27/03/2008
2
• Mọi thuật toán đệ quy gồm 02 phần:
– Phần cơ sở:
Là các trường hợp không cần thực hiện lại thuật
toán (không yêu cầu gọi đệ quy). Nếu thuật toán đệ
quy không có phần này thì sẽ bị lặp vô hạn và sinh
lỗi khi thực hiện. Đôi lúc gọi là trường hợp dừng.
– Phần đệ quy:
Là phần trong thuật toán có yêu cầu gọi đệ quy yêu,
cầu thực hiện thuật toán ở một cấp độ thấp hơn.
Phạm Thế Bảo
Các loại đệ quy
Có 03 loại đệ quy:
1. Đệ quy đuôi:
Là loại đệ quy mà trong một cấp đệ quy chỉ có duy
nhất một lời gọi đệ quy xuống cấp thấp.
Ví dụ:
i. Tính giai thừa
giaiThua(int n){
if(n==0)
giaiThua = 1;
else giaiThua= n*giaiThua(n-1);
}
Phạm Thế Bảo
27/03/2008
3
ii. Tìm kiếm nhị phân
int searchBinary(int left,int right, intx){
if(left<right){
int mid=(left+right)/2;
if(x==A[i])return i;
if(x<A[i])return searchBinary(left,mid-1,x);
return searchBinary(mid+1,right,x);
}
return -1;
}
iii. Phân tích một số nguyên ra thừa số nguyên tố (Bài
tập)
Phạm Thế Bảo
2. Đệ quy nhánh
Là dạng đệ quy mà trong quá trình đệ quy, lời gọi được
thực hiện nhiều lần.
Ví dụ:
i. Tháp Hà nội.
ii. Liệt kê tất cả hoán vị của n phần tử khác nhau.
Thuật toán: 
Xét tất cả các phần tử ai với i=1..n
Bỏ phần tử ai ra khỏi dãy số
Ghi nhận đã lấy ra phần tử ai
Hoán vị (Dãy số)
Đưa phần tử a vào lại dãy số i 
Nếu (Dãy số) rỗng thì thứ tự các phần tử được lấy ra chính là 
một hoán vị
iii. Bài toán tô màu (floodfill)
Phạm Thế Bảo
27/03/2008
4
3. Đệ quy hỗ tương
Là dạng đệ quy mà trong đó việc gọi có xoay
vòng, như A gọi B, B gọi C, và C gọi A. Đây là
trường hợp rất phức tạp.
Ví dụ:
i. Đường Hilbert
ii. Đường Sierpinski
Phạm Thế Bảo
Các phương pháp khử đệ quy
1. Vòng lặp
ằ2. B ng stack
Phạm Thế Bảo
27/03/2008
5
Thành lập phương trình đệ quy
• Phương trình đệ quy là một phương trình biểu diễn mối
quan hệ giữa T(n) và T(k) Với T(n) là “thời gian” thực.
hiện chương trình với kích thước dữ liệu nhập là n, T(k)
là “thời gian” thực hiện chương trình với kích thước dữ
liệu nhập là k, k<n. Dựa trên chương trình đệ quy ta sẽ
thành lập phương trình đệ quy.
• Dạng tổng quát của phương trình đệ quy:
Phạm Thế Bảo
( )
( )
( ( )) ( )
C n
T n
F T k d n
⎧= ⎨ +⎩
• C(n) “thời gian” thực hiện chương trình ứng với 
trường hợp đệ quy dừng.
• F(T(k)) hàm xác định thời gian theo T(k).
• d(n) thừa số hằng
Ví dụ: phương trình đệ quy của bài toán giai thừa.
Gọi T(n) là “thời gian” tính n giai thừa thì T(n-1)
là “thời gian” tính n-1 giai thừa.
Trong trường hợp n=0 thì chỉ có 01 lệnh gán nên
tốn O(1)Æ T(1)=C1.
Trong trường hợp n>0, phải gọi đệ quy
giaiThua(n-1) nên tốn T(n-1), sau khi có kết quả
phải nhân kết quả với n và gán lại vào giaiThua.
ể ằThời gian đ thực hiện pháp nhân và gán là h ng
C2.
Phạm Thế Bảo
27/03/2008
6
Vậy ta có 
Ví d Ph há M S t
1
2
( )
( 1)
neáu n=0
neáu n>0
C
T n
T n C
⎧= ⎨ − +⎩
 ụ: ương p p erge or
Chia dãy ban đầu thành 2 dãy gần bằng nhau.
Chia đến khi nào chỉ còn một phần tử thì dừng chia.
Trộn các dãy lại thành dãy hoàn chỉnh được sắp xếp.
Lý luận tương tự ta có: 
Phạm Thế Bảo
1
2
( )
2 ( )
2
neáu n=1
neáu n>1
C
T n nT nC
⎧⎪= ⎨ +⎪⎩
Giải phương trình đệ quy
1. Phương pháp truy hồi
2. Đoán nghiệm
3. Lời giải tổng quát của một lớp các phương
trình đệ quy
4. Phương pháp hàm sinh
Phạm Thế Bảo
27/03/2008
7
Phương pháp truy hồi
• Thay thế các giá trị trong phương trình để suy 
T( )ra n .
Ví dụ: giải phương trình 
1( )
( 1)
neáu n=0
neáu n>0
C
T n
T n C
⎧= ⎨ +⎩
Phạm Thế Bảo
2 −
Ta có 
T(n) =T(n-1) + C2
=[T(n-2) + C2] + C2 = T(n-2) +2C2 
=[T(n-3) + C2] + 2C2 = T(n-3)+3C2
...
T(n) =T(n-i) + iC2 
Quá trình kết thúc khi n-i=0 hay i=n. Khi đó 
T(n) =T(0) + nC2 = C1 +nC2 = O(n)
Phạm Thế Bảo
27/03/2008
8
Ví dụ: giải phương trình
Có
1
2
( )
2 ( )
2
neáu n=1
neáu n>1
C
T n nT nC
⎧⎪= ⎨ +⎪⎩
n⎛ ⎞
2
2 2 2
2 2 2
( ) 2
2
2 2 4 2
4 2 4
4 2 2 8 3
8 4 8
T n T nC
n n nT C nC T nC
n n nT C nC T nC
= +⎜ ⎟⎝ ⎠
⎡ ⎤⎛ ⎞ ⎛ ⎞= + + = +⎜ ⎟ ⎜ ⎟⎢ ⎥⎝ ⎠ ⎝ ⎠⎣ ⎦
⎡ ⎤⎛ ⎞ ⎛ ⎞= + + = +⎜ ⎟ ⎜ ⎟⎢ ⎥⎝ ⎠ ⎝ ⎠⎣ ⎦
Phạm Thế Bảo
2
...
( ) 2
2
i
i
nT n T inC⎛ ⎞= +⎜ ⎟⎝ ⎠
1i
nquaù trình döøng khi hay i=logn
2
=
2
21
 T(n)=nT(1)+ logn
=nC logn
=O(nlogn)
nC
nC
⇒
+
Phạm Thế Bảo
27/03/2008
9
Bài tập
Giải các phương trình đệ quy sau với T(1)=1:
1 T(n)=3T(n/2)+n.
2. T(n)=4T(n/3)+n
3. T(n)=T(n/2)+1
4. T(n)=2T(n/2)+logn
5 T(n)=2T(n/2)+n.
Phạm Thế Bảo

File đính kèm:

  • pdfBài giảng Phân tích và thiết kế thuật toán - Phạm Thế Bảo - Chương 3 Đệ quy và đánh giá.pdf
Tài liệu liên quan