You are on page 1of 4

 Giới thiệu đệ quy:

- Ta gọi một đối tượng là đệ quy (recursion) nếu nó được định nghĩa
qua chính nó hoặc một đối tượng cùng dạng với chính nó bằng quy
nạp.
- Ví dụ: n!=(n-1)! * n
 Tại sao độ phức tạp của thuật toán đệ quy lại chia ra nhiều nhánh riêng
- Độ phức tạp của thuật toán đệ quy chủ yếu đến từ việc mỗi lần gọi
đệ quy có thể tạo ra nhiều nhánh thực hiện. Điều này dẫn đến việc
bài toán lớn được chia nhỏ thành các bài toán con, và mỗi bài toán
con lại có thể tạo ra nhiều bài toán con khác, và quá trình này lặp đi
lặp lại. Do đó, độ phức tạp thuật toán đệ quy thường chia ra nhiều
nhánh riêng, tăng sự phức tạp của thuật toán.
 So sánh đệ quy và không đệ quy:
- Độ Phức Tạp Thời Gian và Không Gian:
o Đệ Quy:
 Thời Gian: Thời gian thực hiện có thể cao vì cần
nhiều lần gọi đệ quy và làm tăng độ phức tạp.
 Không Gian: Cần lưu trữ nhiều bản sao hàm trên
ngăn xếp, điều này có thể tạo ra vấn đề về không
gian.
o Không Đệ Quy:
 Thời Gian: Thường có thể hiệu quả hơn vì không có
chi phí của việc gọi đệ quy.
 Không Gian: Thường không yêu cầu lưu trữ nhiều
thông tin trên ngăn xếp, do đó sử dụng ít không gian
hơn trong một số trường hợp.
- Rõ Ràng và Dễ Đọc:
o Đệ Quy:
 Rõ Ràng: Trong một số trường hợp, đệ quy có thể
làm cho mã nguồn rõ ràng và dễ đọc hơn.
 Khó Hiểu: Tuy nhiên, có thể làm cho mã nguồn khó
hiểu nếu không được triển khai đúng cách hoặc nếu
có quá nhiều nhánh đệ quy.
o Không Đệ Quy:
 Dễ Hiểu: Thường dễ hiểu hơn và dễ theo dõi luồng
điều khiển của chương trình.
 Không Phức Tạp: Trong một số trường hợp, các thuật
toán không đệ quy có thể trở nên phức tạp hơn và khó
đọc hơn.
- Quản lý Thông Tin Trạng Thái:
o Đệ Quy:
 Thực hiện Tốt: Thích hợp cho các bài toán mà thông
tin trạng thái có thể được duy trì dễ dàng thông qua
các lời gọi đệ quy.
 Chi Phí Nhiều Bộ Nhớ: Cần lưu trữ nhiều bản sao
thông tin trạng thái trên ngăn xếp.
o Không Đệ Quy:
 Thực hiện Tốt: Thích hợp cho các bài toán mà không
cần duy trì thông tin trạng thái qua nhiều lời gọi hàm.
 Quản lý Dễ Dàng: Thông tin trạng thái có thể được
quản lý bằng cách sử dụng biến toàn cục hoặc tham
số truyền vào hàm.
- Hiệu Suất:
o Đệ Quy:
 Hiệu Suất Kém: Trong một số trường hợp, có thể
kém hiệu suất vì chi phí của việc gọi đệ quy và quản
lý ngăn xếp.
 Tối Ưu Hóa Khó Khăn: Thường cần tối ưu hóa để
giảm số lượng lời gọi đệ quy.
o Không Đệ Quy:
 Hiệu Suất Tốt: Thường có hiệu suất tốt hơn trong
nhiều trường hợp.
 Tối Ưu Hóa Dễ Dàng: Tối ưu hóa có thể thực hiện dễ
dàng hơn.
- Kết Luận:
o Sự chọn lựa giữa đệ quy và không đệ quy thường phụ thuộc
vào đặc tính cụ thể của bài toán và sự thuận tiện trong triển
khai. Trong một số trường hợp, đệ quy có thể làm cho mã
nguồn đơn giản hóa, trong khi trong những trường hợp khác,
thuật toán không đệ quy có thể được ưu tiên vì hiệu suất tốt
hơn.
 Recurrence relation:
- Recurrence relation (quan hệ đệ quy) là một công thức toán học mô
tả mối quan hệ giữa các số trong một dãy dựa trên giá trị của các số
trước đó trong dãy. Cụ thể, quan hệ đệ quy cho biết cách một số
trong dãy được tính từ các số trước đó.
- Ví dụ:
o Trong dãy Fibonacci quan hệ đệ quy là công thức:
 F(n) = F(n-1)+F(n-2)
 Với F(1)=1 và F(0)=0
 Khái niệm hàm đệ quy:
- Thuật toán đệ quy là một phương pháp giải quyết vấn đề trong lập
trình máy tính thông qua việc chia nhỏ vấn đề lớn thành các bài toán
nhỏ hơn có cùng cấu trúc với vấn đề gốc. Thuật ngữ "đệ quy" đề cập
đến việc một hàm tự gọi chính nó trong quá trình thực hiện.
- Một hàm đệ quy thường bao gồm hai phần chính:
o Trường hợp cơ bản: Đây là trường hợp đơn giản nhất hoặc
trường hợp giới hạn mà không cần phải giải quyết tiếp nữa.
Khi hàm gặp trường hợp cơ bản, nó trả về kết quả mà không
cần gọi chính nó nữa để tránh lặp vô hạn.
o Bước đệ quy: Đây là bước trong đó hàm gọi chính nó với một
vấn đề nhỏ hơn so với bài toán gốc. Quá trình này lặp lại cho
đến khi gặp trường hợp cơ bản.
o Ví dụ: Chúng ta có thể định nghĩa dãy Fibonacci theo cách đệ
quy như sau:
 F(0) = 0
 F(1) = 1
 F(n) = F(n-1)+F(n-2)
 Một số phương pháp tính độ phức tạp hàm đệ quy:
- Định lý thợ (Master Theorem):
o Định lý thợ là một công cụ mạnh mẽ để tính độ phức tạp của
thuật toán đệ quy.

- Phương pháp thế (Substitution Method):


o Phương pháp này dựa trên việc giả sử độ phức tạp của thuật
toán là một hàm nhất định và sau đó chứng minh thông qua
quy nạp.
o Bước chính của phương pháp thế bao gồm thực hiện giả định,
chứng minh bước quy nạp và xác nhận giả định.
- Vẽ cây đệ quy (Recursion Tree):
o Cách tiếp cận này thường được sử dụng khi phương pháp thế
không rõ ràng.
o Thuật toán được biểu diễn dưới dạng cây đệ quy, trong đó mỗi
nút biểu thị một lời gọi đệ quy và mỗi cấp của cây biểu thị một
cấp độ của đệ quy.
o Bằng cách tính tổng chi phí tại mỗi cấp độ, ta có thể đánh giá
được độ phức tạp toàn cục của thuật toán.

You might also like