1 Re: [Kinh nghiệm]Cách lập luận để lập một hệ thức truy hồi Tue Aug 02, 2011 7:42 am
Admin
Quản trị viên
Bây giờ ta hãy cùng suy ngẫm một chút về cách lập một bài toán sử dụng hệ thức truy hồi.
Khách viếng thăm và tôi đã đọc nhiều bài giải về hệ thức truy hồi rồi, đúng không? Vậy cách thức lập một bài toán theo dạng hệ thức truy hồi cần phải làm như thế nào?
Đọc đi đọc lại các sách thì họ vẫn viết có vẻ hàn lâm quá. Bây giờ Khách viếng thăm cùng tôi suy nghĩ và lý giải một cách dân dã để hiểu bản chất vấn đề, như vậy ta mới có thể giải quyết được mọi bài toán tương tự. Đây không phải là lời giải để viết vào bài thi nhé, đây chỉ là cách thức lập luận để bạn có thể căn cứ vào cách tư duy đó mà lập bất cứ bài truy hồi tương tự thôi. Có thể tạm coi là bình giải cũng được vì viết vào bài thi rất ngắn, nhưng để có được công thức ngắn và chính xác, Khách viếng thăm nếu chưa hiểu thì có thể tư duy 1 cách như thế này. Nếu thấy hay thì cảm ơn, bằng không có thể coi là một cách làm tham khảo.
trong đó ??? là cái công thức mà ta cần phải lập.
Bây giờ ta thử phân tích cách giải bài trên theo cách giải hệ thức truy hồi, nhưng tư duy kiểu "nông thôn" nhé! Để cho dễ hình dung, tôi sẽ không sử dụng chỉ số truy hồi vội, chúng ta sẽ tư duy theo một chỉ số nào đó cho phù hợp với tư duy đã, sau đó sẽ ghép vào chỉ số truy hồi sau.
Giả sử ta đang ở bước thứ m. Gọi cho nó dễ hình dung, tức là tới bước này ta đã kiếm được Am xâu có độ dài là m rồi. Ta thấy trong số các xâu này có thể chia làm 3 phần, mỗi phần là 1 nhóm:
- Nhóm các xâu có độ dài m mà kết thúc với ký tự là a. Tạm gọi là Aa đi.
- Nhóm các xâu có độ dài m mà kết thúc với ký tự là b. Tạm gọi là Ab đi.
- Nhóm các xâu có độ dài m mà kết thúc với ký tự là c. Tạm gọi là Ac đi.
Hay ta có ở đây tạm thời là Am = Aa + Ab + Ac
Ta phải tính công thức cho Am+1 sẽ lấy những dữ liệu gì từ Am sang nhé!
Ở bước tiếp theo m + 1 ta có:
- Những xâu Aa sẽ đẻ ra được gấp đôi số lượng (vì theo đầu bài có thể dùng Aa + b là một trường hợp và Aa + c là một trường hợp nữa). Ta có Aa+1 = 2.Aa
- Những xâu Ab sẽ đẻ ra được gấp đôi số lượng (vì theo đầu bài có thể dùng Ab + a là một trường hợp và Ab + c là một trường hợp nữa). Ta có Ab+1 = 2.Ab
- Những xâu Ac sẽ đẻ ra được gấp 3 số lượng (vì theo đầu bài có thể dùng Ac + a và Ac + b là một trường hợp và Ac + c là một trường hợp nữa, trường hợp thứ 3 này là do đầu bài không cấm có 2 ký tự c liên tiếp). Ta có Ac+1 = 3.Ac = 2.Ac + 1.Ac
Ta có:
Am+1 = Aa+1 + Ab+1 + Ac+1
Am+1 = 2.Aa + 2.Ab + 2.Ac + Ac
Am+1 = 2(Aa + Ab + Ac) + Ac
Am+1 = 2Am + Ac
Ta thấy Ac chính là số phần tử ở bước trước đó (tự ngẫm đi nhé), hay Ac = Am-1 nên có thể viết lại:
Am+1 = 2Am + Am-1
Nếu thay m = n - 1 vào ta đã có hệ thức truy hồi cần tìm rồi.
An = 2An-1 + An-2
Lập thì khó, còn giải thì Khách viếng thăm cứ theo cách giải chuẩn mà phệt [You must be registered and logged in to see this image.]
Khách viếng thăm và tôi đã đọc nhiều bài giải về hệ thức truy hồi rồi, đúng không? Vậy cách thức lập một bài toán theo dạng hệ thức truy hồi cần phải làm như thế nào?
Đọc đi đọc lại các sách thì họ vẫn viết có vẻ hàn lâm quá. Bây giờ Khách viếng thăm cùng tôi suy nghĩ và lý giải một cách dân dã để hiểu bản chất vấn đề, như vậy ta mới có thể giải quyết được mọi bài toán tương tự. Đây không phải là lời giải để viết vào bài thi nhé, đây chỉ là cách thức lập luận để bạn có thể căn cứ vào cách tư duy đó mà lập bất cứ bài truy hồi tương tự thôi. Có thể tạm coi là bình giải cũng được vì viết vào bài thi rất ngắn, nhưng để có được công thức ngắn và chính xác, Khách viếng thăm nếu chưa hiểu thì có thể tư duy 1 cách như thế này. Nếu thấy hay thì cảm ơn, bằng không có thể coi là một cách làm tham khảo.
Ta gọi biểu thức truy hồi sẽ có dạng: An = ???Đề TEST TRR năm 2011 đã viết:b) Có bao nhiêu xâu tam phân có độ dài 7 chỉ gồm các ký tự 'a', 'b', 'c' không chứa 2 ký tự 'a' liên tiếp hoặc 2 ký tự 'b' liên tiếp.
trong đó ??? là cái công thức mà ta cần phải lập.
Bây giờ ta thử phân tích cách giải bài trên theo cách giải hệ thức truy hồi, nhưng tư duy kiểu "nông thôn" nhé! Để cho dễ hình dung, tôi sẽ không sử dụng chỉ số truy hồi vội, chúng ta sẽ tư duy theo một chỉ số nào đó cho phù hợp với tư duy đã, sau đó sẽ ghép vào chỉ số truy hồi sau.
Giả sử ta đang ở bước thứ m. Gọi cho nó dễ hình dung, tức là tới bước này ta đã kiếm được Am xâu có độ dài là m rồi. Ta thấy trong số các xâu này có thể chia làm 3 phần, mỗi phần là 1 nhóm:
- Nhóm các xâu có độ dài m mà kết thúc với ký tự là a. Tạm gọi là Aa đi.
- Nhóm các xâu có độ dài m mà kết thúc với ký tự là b. Tạm gọi là Ab đi.
- Nhóm các xâu có độ dài m mà kết thúc với ký tự là c. Tạm gọi là Ac đi.
Hay ta có ở đây tạm thời là Am = Aa + Ab + Ac
Ta phải tính công thức cho Am+1 sẽ lấy những dữ liệu gì từ Am sang nhé!
Ở bước tiếp theo m + 1 ta có:
- Những xâu Aa sẽ đẻ ra được gấp đôi số lượng (vì theo đầu bài có thể dùng Aa + b là một trường hợp và Aa + c là một trường hợp nữa). Ta có Aa+1 = 2.Aa
- Những xâu Ab sẽ đẻ ra được gấp đôi số lượng (vì theo đầu bài có thể dùng Ab + a là một trường hợp và Ab + c là một trường hợp nữa). Ta có Ab+1 = 2.Ab
- Những xâu Ac sẽ đẻ ra được gấp 3 số lượng (vì theo đầu bài có thể dùng Ac + a và Ac + b là một trường hợp và Ac + c là một trường hợp nữa, trường hợp thứ 3 này là do đầu bài không cấm có 2 ký tự c liên tiếp). Ta có Ac+1 = 3.Ac = 2.Ac + 1.Ac
Ta có:
Am+1 = Aa+1 + Ab+1 + Ac+1
Am+1 = 2.Aa + 2.Ab + 2.Ac + Ac
Am+1 = 2(Aa + Ab + Ac) + Ac
Am+1 = 2Am + Ac
Ta thấy Ac chính là số phần tử ở bước trước đó (tự ngẫm đi nhé), hay Ac = Am-1 nên có thể viết lại:
Am+1 = 2Am + Am-1
Nếu thay m = n - 1 vào ta đã có hệ thức truy hồi cần tìm rồi.
An = 2An-1 + An-2
Lập thì khó, còn giải thì Khách viếng thăm cứ theo cách giải chuẩn mà phệt [You must be registered and logged in to see this image.]