Chuyển đến nội dung chính

Công thức truy hồi trong toán học: Cách thành lập và cách giải

DISCRETE MATHEMATICS / COMPUTER SCIENCE

Công thức truy hồi trong toán rời rạc: cách lập từ bài toán

a[n] = f(a[n-1], a[n-2], ...)

Trong toán rời rạc, nhiều bài toán không xác định trực tiếp giá trị ở trường hợp thứ n, mà mô tả cách xây dựng nó từ những trường hợp nhỏ hơn. Mối quan hệ đó được biểu diễn bằng công thức truy hồi (recurrence relation), một công cụ nền tảng trong tổ hợp, thiết kế thuật toán và lập trình động.

Tóm tắt nội dung

Muốn lập công thức truy hồi đúng, không nên bắt đầu bằng việc đoán công thức. Hãy xác định rõ đại lượng cần tính, chia lời giải theo bước cuối cùng hoặc trạng thái cuối cùng, biểu diễn mỗi trường hợp bằng những bài toán nhỏ hơn rồi bổ sung điều kiện đầu. Phần lớn sai sót xuất phát từ việc bỏ sót trường hợp, đếm trùng hoặc chọn sai trạng thái.

Tư duy xây dựng công thức truy hồi Bài toán lớn được biểu diễn bằng những trạng thái nhỏ hơn đã biết ``` Trạng thái nhỏ a(n − 1) Trạng thái nhỏ a(n − 2) Bài toán hiện tại a(n) Ví dụ cấu trúc a(n) = a(n − 1) + a(n − 2), kèm điều kiện đầu
Minh họa: một trạng thái mới được xây dựng từ các trạng thái nhỏ hơn.
```

1. Công thức truy hồi thực chất là gì?

Giả sử ta có một dãy a0, a1, a2, .... Thay vì viết trực tiếp an theo n, ta có thể xác định an thông qua một hoặc nhiều phần tử đứng trước nó. Chẳng hạn:

an = an-1 + 3

Công thức trên cho biết muốn tìm phần tử hiện tại, ta lấy phần tử ngay trước đó rồi cộng thêm 3. Tuy nhiên, chỉ có biểu thức này vẫn chưa đủ để xác định duy nhất dãy số. Ta còn cần ít nhất một điều kiện đầu, chẳng hạn a0 = 2.

Khi đó ta lần lượt nhận được a1 = 5, a2 = 8, a3 = 11. Như vậy, một định nghĩa truy hồi hoàn chỉnh thường gồm hai thành phần: quan hệ giữa trạng thái hiện tại và trạng thái trước, cùng với các giá trị khởi đầu.

Phân biệt quan trọng: công thức truy hồi trong toán rời rạc không phải là hồi quy trong học máy. Hồi quy (regression) dùng mô hình để ước lượng một đại lượng, còn truy hồi mô tả một đối tượng bằng chính những trường hợp nhỏ hơn của đối tượng đó.

2. Tư duy cốt lõi khi lập công thức truy hồi

Phần khó nhất không phải thao tác đại số mà là chuyển lời văn của bài toán thành các trạng thái nhỏ hơn. Một quy trình đáng tin cậy gồm bốn bước:

  1. Xác định đại lượng cần tính. Đặt tên rõ ràng, chẳng hạn an là số cách thực hiện một công việc với kích thước n.
  2. Xét bước cuối hoặc lựa chọn đầu tiên. Đây thường là vị trí dễ chia bài toán thành những trường hợp không giao nhau.
  3. Quy mỗi trường hợp về bài toán nhỏ hơn. Nếu một lựa chọn làm kích thước giảm từ n xuống n − 1, số phương án còn lại thường liên quan đến an-1.
  4. Xác định điều kiện đầu. Tính trực tiếp các trường hợp nhỏ nhất đủ để khởi động quan hệ truy hồi.

Điểm cần đặc biệt chú ý là các trường hợp dùng để cộng với nhau phải không bị đếm trùng. Nếu hai nhánh có thể dẫn tới cùng một cấu hình, phép cộng trực tiếp sẽ cho kết quả sai.

3. Ví dụ cơ bản: số cách bước lên cầu thang

Xét một cầu thang có n bậc. Mỗi lần ta được bước lên 1 bậc hoặc 2 bậc. Gọi an là số cách đi từ mặt đất lên đúng bậc thứ n.

Thay vì cố gắng liệt kê toàn bộ đường đi, ta xét bước cuối cùng. Để đến bậc n, chỉ có hai khả năng:

  • Bước cuối dài 1 bậc. Trước đó ta phải đang ở bậc n − 1, có an-1 cách.
  • Bước cuối dài 2 bậc. Trước đó ta phải đang ở bậc n − 2, có an-2 cách.

Hai trường hợp loại trừ nhau vì bước cuối không thể đồng thời dài 1 và 2 bậc. Do đó:

an = an-1 + an-2

Với cách quy ước tự nhiên, a0 = 1 vì có đúng một cách để đi hết cầu thang có 0 bậc: không thực hiện bước nào. Đồng thời a1 = 1. Từ đó a2 = 2, a3 = 3, a4 = 5.

n 0 1 2 3 4 5
an 1 1 2 3 5 8

Ví dụ này cho thấy một nguyên tắc rất mạnh: hãy phân loại tất cả lời giải theo hành động cuối cùng. Sau khi cố định hành động cuối, phần còn lại thường trở thành một bài toán cùng loại nhưng có kích thước nhỏ hơn.

4. Từ lời văn đến công thức: ví dụ lát bảng

Giả sử cần lát một bảng kích thước 2 × n bằng các viên domino kích thước 2 × 1. Domino được phép đặt đứng hoặc đặt ngang. Gọi an là số cách lát kín bảng.

Ta tập trung vào phần bên phải của bảng. Nếu viên cuối cùng đặt đứng, nó chiếm trọn một cột, còn lại bảng 2 × (n − 1), tạo ra an-1 cách.

Nếu không đặt đứng thì ô trên cùng bên phải phải thuộc một viên nằm ngang. Khi đó ô dưới nó cũng buộc phải ghép với một viên ngang khác. Hai viên này chiếm hai cột cuối, còn lại bảng 2 × (n − 2), tương ứng an-2 cách.

an = an-1 + an-2,   n ≥ 2

Điều kiện đầu là a0 = 1 và a1 = 1. Đáng chú ý, bài toán cầu thang và bài toán lát bảng có nội dung hoàn toàn khác nhau nhưng dẫn đến cùng dạng truy hồi. Công thức truy hồi vì thế phản ánh cấu trúc toán học của bài toán chứ không phụ thuộc vào câu chuyện mô tả bên ngoài.

5. Khi công thức có hệ số hoặc nhiều nhánh hơn

Không phải mọi truy hồi đều có dạng an = an-1 + an-2. Hệ số xuất hiện khi một trạng thái nhỏ có thể được mở rộng theo nhiều cách khác nhau.

Ví dụ, giả sử ta muốn đếm số chuỗi độ dài n tạo từ các ký hiệu A, B, C mà ký tự cuối được phân thành hai nhóm. Nếu từ mỗi chuỗi hợp lệ độ dài n − 1 có đúng hai cách bổ sung ký hiệu mà vẫn thỏa điều kiện, phần đó sẽ đóng góp 2an-1, không phải chỉ an-1.

Quy tắc kiểm tra: nếu một nhánh truy hồi có hệ số k, phải giải thích được vì sao mỗi trạng thái nhỏ tương ứng chính xác với k lựa chọn ở trạng thái hiện tại.

Một lỗi phổ biến là nhìn vài giá trị đầu rồi đoán quan hệ. Cách này có thể phát hiện quy luật nhưng không chứng minh được công thức. Một công thức truy hồi đáng tin cậy phải xuất phát từ việc phân hoạch tập lời giải thành các trường hợp rõ ràng.

6. Công thức truy hồi trong phân tích thuật toán

Trong khoa học máy tính, truy hồi còn được dùng để mô tả thời gian chạy của thuật toán đệ quy. Chẳng hạn, thuật toán tìm kiếm nhị phân chỉ tiếp tục xử lý khoảng một nửa dữ liệu sau mỗi bước. Nếu T(n) là thời gian chạy với n phần tử, ta có thể mô tả:

T(n) = T(n/2) + c

Trong đó c biểu diễn lượng công việc gần như cố định ở mỗi bước, chẳng hạn so sánh phần tử cần tìm với phần tử giữa. Sau khoảng log2n lần chia đôi, kích thước bài toán giảm xuống 1. Vì vậy thời gian chạy có bậc logarit.

Với sắp xếp trộn, mỗi bài toán kích thước n được chia thành hai bài toán kích thước n/2 và cần thêm lượng công việc tỷ lệ với n để trộn kết quả:

T(n) = 2T(n/2) + cn

Ở đây hệ số 2 xuất hiện vì thuật toán tạo ra hai bài toán con. Thành phần cn là công việc thực hiện ngoài hai lời gọi đệ quy. Khi lập truy hồi cho thuật toán, cần tách rõ số bài toán con, kích thước từng bài toán con và chi phí xử lý tại mức hiện tại.

Ví dụ mô phỏng truy hồi bằng Python

Đoạn mã sau tính số cách bước lên cầu thang. Ta dùng hai giá trị trước đó thay vì gọi đệ quy trực tiếp, nhờ vậy tránh tính lặp cùng một trạng thái nhiều lần.

Python
def so_cach(n):
    if n < 0:
        return 0
    if n <= 1:
        return 1

```
truoc_hai, truoc_mot = 1, 1

for _ in range(2, n + 1):
    hien_tai = truoc_mot + truoc_hai
    truoc_hai, truoc_mot = truoc_mot, hien_tai

return truoc_mot
```

print(so_cach(5))  # 8

Kết quả bằng 8 vì công thức là an = an-1 + an-2 với a0 = a1 = 1. Thuật toán chỉ giữ hai trạng thái cần thiết nên dùng bộ nhớ hằng số.

7. Cách kiểm tra một công thức truy hồi đã lập đúng hay chưa

Sau khi lập công thức, nên kiểm tra bằng các trường hợp nhỏ trước khi giải hoặc lập trình. Đây là bước đơn giản nhưng phát hiện được phần lớn lỗi mô hình hóa.

  • Kiểm tra ý nghĩa trạng thái: an phải có một định nghĩa duy nhất và không thay đổi trong quá trình suy luận.
  • Kiểm tra tính đầy đủ: mọi lời giải hợp lệ phải rơi vào ít nhất một trường hợp đã xét.
  • Kiểm tra không đếm trùng: một lời giải không được xuất hiện ở hai nhánh khác nhau nếu ta cộng số lượng các nhánh.
  • Kiểm tra điều kiện đầu: phải có đủ số giá trị để tính được trạng thái tiếp theo.
  • Kiểm tra bằng tay: tính n = 0, 1, 2 hoặc 3 trực tiếp rồi đối chiếu với công thức.

Nếu công thức dùng an-1 và an-2, thông thường ta cần hai điều kiện đầu độc lập. Nếu dùng tới an-3, có thể cần ba giá trị khởi đầu. Số điều kiện đầu không nên được chọn tùy ý mà phải đủ để quan hệ truy hồi xác định được các giá trị tiếp theo.

Mẫu tư duy nên nhớ
Đặt an là đại lượng cần tìm → chọn một đặc điểm để chia toàn bộ lời giải thành các trường hợp → đưa từng trường hợp về an-1, an-2, ... → cộng hoặc kết hợp các trường hợp → xác định điều kiện đầu → kiểm tra với vài giá trị nhỏ.

Kết luận

Lập công thức truy hồi là quá trình tìm ra cấu trúc lặp bên trong bài toán. Cách tiếp cận hiệu quả nhất là định nghĩa trạng thái chính xác, phân chia lời giải theo bước đầu hoặc bước cuối, rồi quy từng nhánh về những trạng thái nhỏ hơn.

Khi đã hình thành được tư duy này, công thức truy hồi không chỉ giúp giải các bài toán đếm trong toán rời rạc mà còn trở thành nền tảng để hiểu đệ quy, lập trình động và phân tích độ phức tạp của nhiều thuật toán quan trọng.

© The CS Note · THE CS NOTE

Nội dung gốc thuộc tác giả. Vui lòng không đăng lại toàn văn khi chưa được phép, trừ trường hợp pháp luật hoặc giấy phép áp dụng cho phép. Nội dung của bên thứ ba tuân theo quyền và giấy phép tương ứng.

Nguồn gốc: Công thức truy hồi trong toán học: Cách thành lập và cách giải

Về trang chủ Về đầu bài

Bài Đăng Phổ Biến

Bài toán tháp Hà nội

Trải nghiệm Tháp Hà Nội Kéo thả đĩa hoặc chạm vào các nút bên dưới để di chuyển. Bạn phải chuyển toàn bộ đĩa sang cột ngoài cùng bên phải (Cột 3) mà không đặt đĩa to lên đĩa nhỏ. Cột 1 Cột 2 Cột 3 Điều khiển & Chế độ Số lượng đĩa 4 Tốc độ máy giải ↪ Undo ↻ Chơi lại 🤖 Máy tự giải Thống kê ván chơi Nước đã đi 0 Thời gian 00:00 Tối thiểu cần 15 Kỷ lục của bạn - Lịch sử và Nguồn gốc Truyền thuyết Bài toán Tháp Hà Nội (hay Tháp Brahma) là một trò chơi xếp hình toán học kinh điển được giới thiệu lần đầu vào năm 1883 bởi nhà toán học người Pháp Édouard L...

Bài toán phân tích cảm xúc trong văn bản

Bài toán phân tích cảm xúc (sentiment analysis) là một bài toán NLP nhằm xác định thái độ hoặc cảm xúc được thể hiện trong văn bản. Ví dụ, từ một đánh giá như “Điện thoại đẹp, chạy nhanh nhưng pin hơi yếu”, hệ thống có thể nhận biết rằng người dùng có cả nhận xét tích cực và tiêu cực. Điểm thú vị của bài toán nằm ở khoảng cách giữa cách con người hiểu ngôn ngữ và cách máy tính xử lý dữ liệu. Một hệ thống phân tích cảm xúc cần biến văn bản tự nhiên thành dữ liệu có cấu trúc, học được các mẫu ngôn ngữ từ dữ liệu huấn luyện và đưa ra dự đoán hợp lý trên những câu chưa từng gặp. 1. Bài toán phân tích cảm xúc bắt đầu từ đâu? Hãy tưởng tượng một cửa hàng trực tuyến có hàng nghìn đánh giá mỗi ngày. Con người có thể đọc từng đánh giá để biết khách hàng hài lòng hay không, nhưng việc này nhanh chóng trở nên tốn thời gian khi dữ liệu tăng lên. NLP có thể biến bài toán đó thành một bài toán phân loại. Với mỗi văn bản, hệ thống nhận vào một chuỗi ký...

KAN cho phân đoạn khối u não với bộ BraTS 2020

Kolmogorov-Arnold Network (KAN) mở ra một hướng khác với MLP truyền thống: thay vì chỉ học các trọng số vô hướng trên mỗi kết nối, KAN có thể học những hàm phi tuyến một biến trên các cạnh . Khi đưa ý tưởng này vào kiến trúc encoder-decoder như U-Net, ta có thể sử dụng convolution để giữ cấu trúc không gian của ảnh MRI và dùng KAN để thực hiện các phép biến đổi phi tuyến mạnh hơn trên representation trung gian. Một bài toán phù hợp để nghiên cứu hướng này là phân đoạn u thần kinh đệm trên BraTS 2020 . Dataset cung cấp MRI đa mô thức và yêu cầu xác định các vùng Whole Tumor (WT), Tumor Core (TC) và Enhancing Tumor (ET). Đây là bài toán 3D có sự mất cân bằng voxel lớn, hình dạng khối u rất đa dạng và ranh giới giữa các mô bệnh lý không đơn giản. Lưu ý học thuật quan trọng: U-KAN gốc được công bố cho nhiều benchmark phân đoạn ảnh y tế nhưng không báo cáo kết quả BraTS 2020. Một công trình sau đó đã mở rộng U-KAN sang 3D MRI brain tumor segmentation , nhưng đánh giá trên BraTS 2...

Tách từ trong tiếng Việt Word Segmentation

Tách từ tiếng Việt là bài toán xác định ranh giới giữa các từ trong một chuỗi văn bản. Khó khăn nằm ở chỗ khoảng trắng trong tiếng Việt thường phân cách các âm tiết , nhưng một từ hoàn chỉnh có thể gồm nhiều âm tiết như “sinh viên” , “đại học” , “công nghệ” hay “tự nhiên” . Tách từ đúng giúp các hệ thống NLP dựa trên từ biểu diễn văn bản hợp lý hơn, đặc biệt trong tìm kiếm, TF-IDF, phân loại văn bản, gán nhãn từ loại và một số mô hình ngôn ngữ tiếng Việt. Tuy nhiên, với các Transformer sử dụng tokenizer dưới mức từ như subword hoặc SentencePiece, tách từ thủ công không phải lúc nào cũng là bước bắt buộc . Việc có cần tách từ trước hay không phụ thuộc vào mô hình và pipeline cụ thể. Tóm tắt nội dung Khoảng trắng trong tiếng Việt không phải lúc nào cũng là ranh giới từ ; nhiều từ gồm hai hoặc nhiều âm tiết. Word segmentation và tokenization có liên quan nhưng không hoàn toàn đồng nghĩa. Ba hướng chính gồm dựa trên từ điển, mô hình thống kê và mô hình học sâu . Tron...

KAN là gì? Mạng Kolmogorov-Arnold khác MLP thế nào?

Kolmogorov-Arnold Network (KAN) là một kiến trúc mạng nơ-ron trong đó mỗi cạnh không chỉ chứa một trọng số vô hướng mà mang một hàm một biến có thể học được . Đây là khác biệt cốt lõi so với Multi-Layer Perceptron (MLP), nơi các cạnh chủ yếu thực hiện phép nhân với trọng số còn hàm kích hoạt thường được áp dụng tại các node. KAN được lấy cảm hứng từ định lý biểu diễn Kolmogorov-Arnold và đặc biệt đáng chú ý trong các bài toán xấp xỉ hàm, mô hình hóa khoa học và symbolic regression. Tuy nhiên, KAN không nên được hiểu là kiến trúc đã thay thế MLP trong mọi bài toán Deep Learning; khả năng biểu diễn, chi phí tính toán và mức độ phù hợp của hai kiến trúc khác nhau theo từng nhiệm vụ. Tóm tắt nội dung MLP học chủ yếu trọng số trên các cạnh , còn KAN đặt hàm một biến học được trên từng cạnh . Một KAN layer cộng kết quả của nhiều hàm cạnh để tạo activation của node tiếp theo. KAN gốc sử dụng B-spline để tham số hóa các hàm phi tuyến trên cạnh. KAN có lợi thế đáng chú ý về trực...