Chương II Giải thuật đệ qui - Bài tập Cấu trúc dữ liệu và giải thuật | Trường Đại học Bách khoa Hà Nội

Giải thuật đệ qui là giải thuật được định nghĩa sử dụng chính giải thuật có dạng giống nó. Cấu trúc của một thuật toán đệ qui bao gồm 2
bước duyệt theo thứ tự giữa ta được biểu thức tiền tố. Tài liệu được sưu tầm, giúp bạn ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 1
Cutrúcd liuvàGiithut
Chương II
Gii thut đệ qui
Gii thut đệ qui
Ni dung
Các khái nim cơ bn
Mt s d
Phân tích gii thut đệ qui
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 2
Mt s đối tượng đệ qui
Mt s đối tượng đệ qui
z Hàm đệ qui:
hàm được xác định ph thuc vào mt biến
nguyên không âm n theo sơ đồ:
z Bước cơ s : xác định giá tr hàm ti mt giá tr n giá tr
nh nht có th ca biến
z Bước đệ qui: Cho giá tr f(k) , đưa ra qui tc để tính
f(k+1)
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 3
Mt s đối tượng đệ qui
z Tp hp đệ qui
tp được xác định như sau
z Bước cơ s: Định nghĩa tp cơ s
z Bước đệ qui: Xác định qui tc để sn sinh tp mi t
tp đã có
Mt s đối tượng đệ qui
z Định nghĩa đệ qui ca xâu ký t
A = bng ch cái, tp các xâu S trên bng ch
cái A được xác định
z Xâu rng là xâu trong S
z Nếu w thuc S và x là mt ký t trong A thì wx là xâu
trong S
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 4
Mt s đối tượng đệ qui
z Cây
Định nghĩa đệ qui ca cây
z Mt nút to thành 1 cây
z Nếu có n cây T
1
, T
2
, …, T
n
vi nút gc là r
1
, r
2
, … , r
n
; r
mt nút có quan h cha-con r
1
, r
2
, … , r
n
thì tn ti mt
cây mi T nhn r làm gc
Gii thut đệ qui
Định nghĩa: Gii thut đệ qui là gii thut được
định nghĩa s dng chính gii thut có dng
ging nó
Cu trúc ca mt thut toán đệ qui bao gm 2
bước
z Bước cơ s
Vi nhng giá tr đầu vào đủ nh, bài toán có th gii quyết
trc tiếp
z Bước đệ qui
Li gi đến gii thut đang định nghĩa
Li gi đệ qui phi được định nghĩa để tiến gn hơn đến
bước cơ s
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 5
Các dng gii thut đệ qui
Đệ qui trc tiếp : AÆ A
Đệ qui gián tiếp: AÆB ÆÆA
Đệ qui đuôi
z Li gi đệ qui luôn luôn nm cui cùng trong gii thut
Gii thut đệ qui
d: Hàm tính n!
>
=
=
0)1(*
01
)(
nifnFactn
nif
nFact
Function recursiveFactorial(n)
Begin
{Tính giá tr n! }
1. if n = 0 then return 1
else return n*FACT(n-1);
2. End.
Trường hp cơ s
Li gi đệ qui
T hp kết qu
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 6
Gii thut đệ qui
Hình dung vic thc hin gii thut tính n!
recursiveFactorial (4 )
recursiveFactorial (3 )
recursiveFactorial (2 )
recursiveFactorial (1 )
recursiveFactorial (0 )
return 1
call
call
call
call
return 1 *1 = 1
return 2 *1 = 2
return 3 *2 = 6
return 4 * 6 = 24
final answer
call
Gii thut đệ qui
Dãy Fibonacci
+
=
=
=
otherwisenFibonaccinFibonacci
nif
nif
nFibonacci
)2()1(
11
00
)(
Function Fibonacci(n)
Begin
{Tính giá tr n! }
1. if n <= 1 then return n
else return (Fibonacci(n-1)+Fibonacci(n-2));
2. End.
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 7
Gii thut đệ qui
Thc hin tính Fibonacci(6)
Fibonacci(5)
Fibonacci(4) Fibonacci(3)
Fibonacci(3) Fibonacci(2)
Fibonacci(2)
Fibonacci(1)
Fibonacci(2)
Fibonacci(1)
Fionacci(4)
Fibonacci(3) Fibonacci(2)
Fibonacci(2)
Fibonacci(1)
Fibonacci(6)
Gii thut đệ qui
Bài toán Tháp Hà ni
z 3 cc A, B, C và n đĩa có kích thước khác nhau
z Ban đầu, các đĩa được xếp có th t đĩa to trên, đĩa
nhỏở dưới ti cc A
z Mc tiêu là chuyn n đĩa này sang cc C vi điu kin
mi ln được chuyn 1 đĩa, không được đặt đĩa to
trên đĩa nh
AC
B
n đĩa
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 8
Gii thut đệ qui
z Bước cơ s : n <= 1, gii quyết trc tiếp
AC
B
AC
B
Move(A, C)
Gii thut đệ qui
z Bước đệ qui: Gi s rng bài toán chuyn n-1 đĩa đã
được gii quyết , vy có th thc hin vi n đĩa ?
AC
B
AC
B
AC
B
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 9
Gii thut đệ qui
AC
B
AC
B
AC
B
AC
B
Gii thut đệ qui
AC
B
AC
B
AC
B
AC
B
TOWER(n, A, B, C)
Move(A, C)
TOWER(n-1, B, A, C)
TOWER(n-1, A, C, B)
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 10
Gii thut đệ qui
Procedure TOWER( n, A, B, C)
Begin
{n là sốđĩaban đầutrênccA, cc đầutiênđượcch
định ccchacácđĩacnchuyn, ccth 2 là cc
trung chuyn, ccth 3 là cccnchuyn đĩa đến}
if n < 1 then return
else begin
call TOWER(n-1, A, C, B)
call MOVE(A,C)
call TOWER( n-1, B, A, C)
end
End
Phân tích thut toán đệ qui
Hàm thi gian thc hin gii thut T(n) là hàm đệ
qui vi tham s n
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 11
Phân tích thut toán đệ qui
d 1
z T(0) = 1
z T(n) = 2 + T(n-1)
Procedure f(n)
{n là s nguyên không âm}
Begin
if (n > 0) then begin
writeln(n) ;
Call f(n-1);
end
End
Phân tích gii thut đệ qui
d 2
z Trường hp cơ s
T(1) = 2
z Đệ qui
T(n) = c + 2* T(n/2)
Function g( n)
Begin
if (n =1) then
return 2;
else
return 3 * g(n / 2) + g( n / 2) + 5;
End.
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 12
Phân tích thi gian thc hin gii thut
Cách thc gii công thc đệ qui ca thi gian
thc hin gii thut đệ qui
z Phương pháp lp
Phân tích gii thut đệ qui
z Phương pháp lp
Gii công thc đệ qui ca thi gian thành mt
tng các toán hng c th
z Lp li vic thay thế hàm cho đến khi bt gp trường
hp cơ s
z Tính tng
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 13
Phân tích gii thut đệ qui
d: T(n) = c + T(n/2)
T(n) = c + T(n/2)
= c + c + T(n/4)
= c + c + c + T(n/8)
Gi s n = 2
k
T(n) = c + c + … + c + T(1)
= clogn + T(1)
Vy ta có T(n) = O(logn)
Phân tích gii thut đệ qui
d: T(n) = n + 2T(n/2)
T(n) = n + 2T(n/2)
= n + 2(n/2 + 2T(n/4))
= n + n + 4T(n/4)
= n + n + 4(n/4 + 2T(n/8))
= n + n + n + 8T(n/8)
…= in + 2
i
T(n/2
i
)
Gi s n = 2
k
thì ta s rút gn được
T(n) = kn + 2
k
T(1)
= nlogn + nT(1)
Vy T(n)= O(nlogn)
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 14
Phân tích gii thut đệ qui
z Phân tích gii thut tính giai tha
T(0) = c
T(n) = b + T(n - 1)
= b + b + T(n - 2)
= b +b +b + T(n - 3)
= kb + T(n - k)
Khi k = n, ta có:
T(n) = nb + T(n - n)
= bn + T(0)
= bn + c.
Vy T(n) = O(n).
Function recursiveFactorial(n)
Begin
{Tính giá tr n! }
1. if n = 0 then return 1
else return n*FACT(n-1);
2. End.
Phân tích gii thut đệ qui
z Phân tích gii thut Tháp Hà Ni
T(1) = a
T(n) = b+ 2T(n-1)
Procedure TOWER( n, A, B, C)
Begin
if n < 1 then return
else begin
call TOWER(n-1, A, C, B);
call MOVE(A,C);
call TOWER( n-1, B, A, C);
end
End
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 15
Phân tích gii thut đệ qui
T(n) = 2T(n – 1) + b
= 2[2T(n – 2) + b] + b = 2
2
T(n – 2) + 2b + b
= 2
2
[2T(n – 3) + b] + 2b + b = 2
3
T(n – 3) + 2
2
b + 2b + b
= 2
3
[2T(n – 4) + b] + 2
2
b + 2b + b = 2
4
T(n – 4) + 2
3
b + 2
2
b
+ 2
1
b + 2
0
b
= ……
= 2
k
T(n – k) + b[2
k- 1
+ 2
k– 2
+ . . . 2
1
+ 2
0
]
Khi n = k-1 ta có
Kh đệ qui
Mt hàm đệ qui có th được gii quyết tương
đương bng vic s dng vòng lp và stack
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 16
Kh đệ qui
Algorithm P (val n <integer>)
1 if (n = 0)
1 print ("Stop")
2else
1Q(n)
2P(n -1)
3R(n)
End P
Kh đệ qui
Algorithm P (n) Algorithm P (n)
1 if (n = 0) 1 createStack (s)
1 print ("Stop") 2 loop (n > 0)
2else 1 Q(n)
1 Q(n) 2 push(s, n)
2 P(n - 1) 3 n = n - 1
3 R(n) 3 print ("Stop")
End P 4 loop (not emptyStack (s))
1 popStack(s, n)
2 R(n)
End P
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 17
Kh đệ qui
Algorithm P (n)
1 if (n = 0)
1 print("Stop")
2else
1Q(n)
2P(n -1)
End P
Kh đệ qui
Algorithm P (n)
1 if (n = 0)
1 print("Stop")
2else
1Q(n)
2P(n -1)
End P
Algorithm P (n)
1 loop (n > 0)
1 Q(n)
2 n = n - 1
2 print("Stop")
End P
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 18
Đệ qui có nh
z Mt k thut s dng khi trong các bài toán đệ qui có
vic lp đi lp li li gi mt bài toán con nào đó
z Làm tăng tính hiu qu ca gii thut đệ qui
Fibonacci(5)
Fibonacci(4) Fibonacci(3)
Fibonacci(3) Fibonacci(2)
Fibonacci(2)
Fibonacci(1)
Fibonacci(2)
Fibonacci(1)
Fionacci(4)
Fibonacci(3) Fibonacci(2)
Fibonacci(2)
Fibonacci(1)
Fibonacci(6)
Đệ qui có nh
Ý tưởng khc phc:
z Ghi li li gii ca các bài toán con s dng mt biến
trong gii thut
z d: Bài toán tính h s nh thc
nkknCknCknC
nnnC
nnC
<<+=
=
=
0),1()1,1(),(
)0(1),(
)0(1)0,(
Cu trúc d liu và gii thut
Đố Bích Dip- Khoa CNTT-ĐHBKHN 19
Đệ qui có nh
z Hàm đệ qui ca bài toán
z Hàm đệ qui có nh
Function C(n,k)
Begin
if ( k == 0) || (k ==n) then return 1;
else return C(n-1,k-1) + C( n-1,k);
End
Function C(n,k)
Begin
if D[n,k] > 0 then return D[n,k];
else D[n,k] = C(n-1,k-1) + C( n-1,k);
return D[n,k];
End
| 1/19

Preview text:

Cấu trúc dữ liệu và giải thuật
Cấu trúc dữ liệu và Giải thuật Chương II Giải thuật đệ qui
Giải thuật đệ qui Nội dung Các khái niệm cơ bản Một số ví dụ
Phân tích giải thuật đệ qui
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 1
Cấu trúc dữ liệu và giải thuật
Một số đối tượng đệ qui
Một số đối tượng đệ qui z Hàm đệ qui:
– Là hàm được xác định phụ thuộc vào một biến
nguyên không âm n theo sơ đồ:
z Bước cơ sở : xác định giá trị hàm tại một giá trị n giá trị
nhỏ nhất có thể của biến
z Bước đệ qui: Cho giá trị f(k) , đưa ra qui tắc để tính f(k+1)
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 2
Cấu trúc dữ liệu và giải thuật
Một số đối tượng đệ qui z Tập hợp đệ qui
– Là tập được xác định như sau
z Bước cơ sở: Định nghĩa tập cơ sở
z Bước đệ qui: Xác định qui tắc để sản sinh tập mới từ tập đã có
Một số đối tượng đệ qui
z Định nghĩa đệ qui của xâu ký tự
– A = bảng chữ cái, tập các xâu S trên bảng chữ cái A được xác định z Xâu rỗng là xâu trong S
z Nếu w thuộc S và x là một ký tự trong A thì wx là xâu trong S
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 3
Cấu trúc dữ liệu và giải thuật
Một số đối tượng đệ qui z Cây
– Định nghĩa đệ qui của cây
z Một nút tạo thành 1 cây
z Nếu có n cây T , T , …, T với nút gốc là r , r , … , r ; r 1 2 n 1 2 n
là một nút có quan hệ cha-con r , r , … , r thì tồn tại một 1 2 n
cây mới T nhận r làm gốc
Giải thuật đệ qui
– Định nghĩa: Giải thuật đệ qui là giải thuật được
định nghĩa sử dụng chính giải thuật có dạng giống nó
– Cấu trúc của một thuật toán đệ qui bao gồm 2 bước z Bước cơ sở
– Với những giá trị đầu vào đủ nhỏ, bài toán có thể giải quyết trực tiếp z Bước đệ qui
– Lời gọi đến giải thuật đang định nghĩa
– Lời gọi đệ qui phải được định nghĩa để nó tiến gần hơn đến bước cơ sở
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 4
Cấu trúc dữ liệu và giải thuật
Các dạng giải thuật đệ qui
– Đệ qui trực tiếp : AÆ A
– Đệ qui gián tiếp: AÆB Æ…ÆA – Đệ qui đuôi
z Lời gọi đệ qui luôn luôn nằm cuối cùng trong giải thuật
Giải thuật đệ qui – Ví dụ: Hàm tính n! ⎧ 1 if n = 0
Fact (n) = ⎨⎩n*Fact(n − )1 if n > 0
Function recursiveFactorial(n) Begin {Tính giá trị n! } Trường hợp cơ sở 1. if n = 0 then return 1 else return n*FACT(n-1); 2. End. Lời gọi đệ qui Tổ hợp kết quả
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 5
Cấu trúc dữ liệu và giải thuật
Giải thuật đệ qui
– Hình dung việc thực hiện giải thuật tính n! return 4 * 6 = 24 final answer cal recursiveFactorial (4 ) cal return 3 *2 = 6 recursiveFactorial (3 ) cal return 2 *1 = 2 recursiveFactorial (2 ) cal return 1 *1 = 1 recursiveFactorial (1 ) cal return 1 recursiveFactorial (0 )
Giải thuật đệ qui – Dãy Fibonacci ⎧0 if n = 0 ⎪
Fibonacci (n) = ⎨1 if n = 1 ⎪
Fibonacci (n − )
1 + Fibonacci (n − 2) otherwise Function Fibonacci(n) Begin {Tính giá trị n! } 1. if n <= 1 then return n
else return (Fibonacci(n-1)+Fibonacci(n-2)); 2. End.
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 6
Cấu trúc dữ liệu và giải thuật
Giải thuật đệ qui
– Thực hiện tính Fibonacci(6) Fibonacci(6) Fibonacci(5) Fionacci(4) Fibonacci(4) Fibonacci(3) Fibonacci(3) Fibonacci(2)
Fibonacci(3) Fibonacci(2) Fibonacci(2) Fibonacci(2) Fibonacci(1) Fibonacci(2) Fibonacci(1) Fibonacci(1)
Giải thuật đệ qui – Bài toán Tháp Hà nội
z Có 3 cọc A, B, C và n đĩa có kích thước khác nhau
z Ban đầu, các đĩa được xếp có thứ tự đĩa to ở trên, đĩa
nhỏ ở dưới tại cọc A
z Mục tiêu là chuyển n đĩa này sang cọc C với điều kiện
mỗi lần được chuyển 1 đĩa, không được đặt đĩa to ở trên đĩa nhỏ B n đĩa A C
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 7
Cấu trúc dữ liệu và giải thuật
Giải thuật đệ qui
z Bước cơ sở : n <= 1, giải quyết trực tiếp B B A C A C Move(A, C)
Giải thuật đệ qui
z Bước đệ qui: Giả sử rằng bài toán chuyển n-1 đĩa đã
được giải quyết , vậy có thể thực hiện với n đĩa ? B B A C A C B A C
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 8
Cấu trúc dữ liệu và giải thuật
Giải thuật đệ qui B B A C A C B A C B A C
Giải thuật đệ qui B TOWER(n-1, A, C, B) B A C A C B Move(A, C) TOWER(n, A, B, C) A C B TOWER(n-1, B, A, C) A C
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 9
Cấu trúc dữ liệu và giải thuật
Giải thuật đệ qui
Procedure TOWER( n, A, B, C) Begin
{n là số đĩa ban đầu trên cọc A, cọc đầu tiên được chỉ
định là cọc chứa các đĩa cần chuyển, cọc thứ 2 là cọc
trung chuyển, cọc thứ 3 là cọc cần chuyển đĩa đến } if n < 1 then return else begin call TOWER(n-1, A, C, B) call MOVE(A,C) call TOWER( n-1, B, A, C) end End
Phân tích thuật toán đệ qui
– Hàm thời gian thực hiện giải thuật T(n) là hàm đệ qui với tham số n
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 10
Cấu trúc dữ liệu và giải thuật
Phân tích thuật toán đệ qui – Ví dụ 1 Procedure f(n) z T(0) = 1
{n là số nguyên không âm} z T(n) = 2 + T(n-1) Begin if (n > 0) then begin writeln(n) ; Call f(n-1); end End
Phân tích giải thuật đệ qui – Ví dụ 2 Function g( n) z Trường hợp cơ sở Begin T(1) = 2 if (n =1) then z Đệ qui return 2; T(n) = c + 2* T(n/2) else
return 3 * g(n / 2) + g( n / 2) + 5; End.
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 11
Cấu trúc dữ liệu và giải thuật
Phân tích thời gian thực hiện giải thuật
– Cách thức giải công thức đệ qui của thời gian
thực hiện giải thuật đệ qui z Phương pháp lặp
Phân tích giải thuật đệ qui z Phương pháp lặp
– Giải công thức đệ qui của thời gian thành một
tổng các toán hạng cụ thể
z Lặp lại việc thay thế hàm cho đến khi bắt gặp trường hợp cơ sở z Tính tổng
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 12
Cấu trúc dữ liệu và giải thuật
Phân tích giải thuật đệ qui
– Ví dụ: T(n) = c + T(n/2) T(n) = c + T(n/2) = c + c + T(n/4) = c + c + c + T(n/8) Giả sử n = 2k T(n) = c + c + … + c + T(1) = clogn + T(1) Vậy ta có T(n) = O(logn)
Phân tích giải thuật đệ qui
– Ví dụ: T(n) = n + 2T(n/2) T(n) = n + 2T(n/2) = n + 2(n/2 + 2T(n/4)) = n + n + 4T(n/4) = n + n + 4(n/4 + 2T(n/8)) = n + n + n + 8T(n/8) … = in + 2iT(n/2i)
Giả sử n = 2k thì ta sẽ rút gọn được T(n) = kn + 2kT(1) = nlogn + nT(1) Vậy T(n)= O(nlogn)
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 13
Cấu trúc dữ liệu và giải thuật
Phân tích giải thuật đệ qui
z Phân tích giải thuật tính giai thừa T(0) = c
Function recursiveFactorial(n) T(n) = b + T(n - 1) Begin = b + b + T(n - 2) {Tính giá trị n! } = b +b +b + T(n - 3) 1. if n = 0 then return 1 … else return n*FACT(n-1); = kb + T(n - k) 2. End. Khi k = n, ta có: T(n) = nb + T(n - n) = bn + T(0) = bn + c. Vậy T(n) = O(n).
Phân tích giải thuật đệ qui
z Phân tích giải thuật Tháp Hà Nội T(1) = a
Procedure TOWER( n, A, B, C) T(n) = b+ 2T(n-1) Begin if n < 1 then return else begin call TOWER(n-1, A, C, B); call MOVE(A,C); call TOWER( n-1, B, A, C); end End
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 14
Cấu trúc dữ liệu và giải thuật
Phân tích giải thuật đệ qui T(n) = 2T(n – 1) + b = 2[2T(n – 2) + b] + b = 22 T(n – 2) + 2b + b
= 22 [2T(n – 3) + b] + 2b + b = 23 T(n – 3) + 22b + 2b + b
= 23 [2T(n – 4) + b] + 22b + 2b + b = 24 T(n – 4) + 23 b + 22b + 21b + 20b = ……
= 2k T(n – k) + b[2k- 1 + 2k– 2 + . . . 21 + 20] Khi n = k-1 ta có Khử đệ qui
– Một hàm đệ qui có thể được giải quyết tương
đương bằng việc sử dụng vòng lặp và stack
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 15
Cấu trúc dữ liệu và giải thuật Khử đệ qui Algorithm P (val n ) 1 if (n = 0) 1 print ("Stop") 2 else 1 Q(n) 2 P (n - 1) 3 R(n) End P Khử đệ qui Algorithm P (n) Algorithm P (n) 1 if (n = 0) 1 createStack (s) 1 print ("Stop") 2 loop (n > 0) 2 else 1 Q(n) 1 Q(n) 2 push(s, n) 2 P(n - 1) 3 n = n - 1 3 R(n) 3 print ("Stop") End P 4 loop (not emptyStack (s)) 1 popStack(s, n) 2 R(n) End P
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 16
Cấu trúc dữ liệu và giải thuật Khử đệ qui Algorithm P (n) 1 if (n = 0) 1 print("Stop") 2 else 1 Q(n) 2 P (n - 1) End P Khử đệ qui Algorithm P (n) Algorithm P (n) 1 if (n = 0) 1 print("Stop") 1 loop (n > 0) 2 else 1 Q(n) 1 Q(n) 2 n = n - 1 2 P(n - 1) 2 print("Stop") End P End P
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 17
Cấu trúc dữ liệu và giải thuật Đệ qui có nhớ
z Một kỹ thuật sử dụng khi trong các bài toán đệ qui có
việc lặp đi lặp lại lời gọi một bài toán con nào đó
z Làm tăng tính hiệu quả của giải thuật đệ qui Fibonacci(6) Fibonacci(5) Fionacci(4) Fibonacci(4) Fibonacci(3) Fibonacci(3) Fibonacci(2)
Fibonacci(3) Fibonacci(2) Fibonacci(2) Fibonacci(2) Fibonacci(1) Fibonacci(2) Fibonacci(1) Fibonacci(1) Đệ qui có nhớ
– Ý tưởng khắc phục:
z Ghi lại lời giải của các bài toán con sử dụng một biến trong giải thuật
z Ví dụ: Bài toán tính hệ số nhị thức C(n, ) 0 = 1 (n ≥ 0)
C(n, n) = 1 (n ≥ ) 0
C(n, k) = C(n − , 1 k − ) 1 + C(n − ,
1 k) 0 < k < n
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 18
Cấu trúc dữ liệu và giải thuật Đệ qui có nhớ
z Hàm đệ qui của bài toán Function C(n,k) Begin
if ( k == 0) || (k ==n) then return 1;
else return C(n-1,k-1) + C( n-1,k); End z Hàm đệ qui có nhớ Function C(n,k) Begin
if D[n,k] > 0 then return D[n,k];
else D[n,k] = C(n-1,k-1) + C( n-1,k); return D[n,k]; End
Đố Bích Diệp- Khoa CNTT-ĐHBKHN 19