LÝ THUYẾT CƠ SỞ
Có hai cách thức để lưu các value của một problem mà những value này có thể được tái sử dụng.Ở đây, chúng ta tập trung vào hai mô hình của việc giải quyết problem thông qua dynamic programming. Đó là:
1. Tabulation: Sự sắp xếp thành bảng, cột. Từ dưới lên gọi là bottom up.
2. Memoization: Sự ghi nhớ hay lưu trữ. Từ trên xuống gọi là top down
Trước khi đi đến những định nghĩa của hai mục trên, ta xem xét 2 phát biểu sau:
Version 1: Tôi sẽ học lý thuyết của Quy hoạch động từ blog buingoctai.blogspot.com và sau đó practice vài problem trên đây, dĩ nhiên tôi sẽ trở thành chuyên gia về lập trình quy hoạch động.
Version 2: Để trở thành một chuyên gia về lập trình quy hoạch động, tôi cần luyện tập giải quyết nhiều problem về quy hoạch động, do đó đầu tiên, tôi cần học lý thuyết về quy hoạch động từ trang buingoctai.blogspot.com.
Cả hai version trên đều giống nhau về mặt nội dung, chỉ khác nhau về cách truyền đạt lời nhắn trên và đó chính xác là cách làm việc của bottom up và top down.
Version 1 có thể được xem như bottom up và Version 2 được xem như top down.
TABULATION METHOD- BOTTOM UP DYNAMIC PROGRAMMING
Đúng như cái tên của nó, bắt đầu từ đấy và tích lũy câu trả lời đến top.cùng thảo luận vào những mục của sự chuyển đổi trạng thái.
Ta xem trạng thái cơ sở được gắn liền với dp[0] và trạng thái đích là dp[n]. vì vậy ta cần tìm value của trạng thái đích dp[n]
Cách tiếp cận theo kiểu bottom up là chúng ta bắt đầu sự chuyển đổi từ trạng thái cơ bản bottom và đi đến trạng thái top mong muốn.
Vậy tại sao ta gọi đó là tabulation method ?
Để hiểu được nó, ta cần viết 1 vài dòng code tinh thừa số của một số sử dụng cách tiếp cận bottom up. Các thủ tục thông thường để solve một DP problem là đầu tiên ta cần định nghĩa một trạng thái.
trong trường hợp này ta định nghĩa 1 trạng thái như 1 dp[x] mà ở đó dp[x] là để tìm thừa số của x.
Rất dễ hiểu rằng dp[x+1]=dp[x]*(x+1). ví dụ tìm giai thừa của 4 thì rõ ràng ta thấy giai thừa của 4= giai thừa của 3 nhân cho 4
implement trong c:
Ở cách tiếp cận theo phương pháp tabulation trên, ta bắt đầu sự chuyển tiếp từ đáy với trạng thái cơ bản là dp[0] và tới trạng thái đích là dp[9]. ở đây chúng ta nhận thấy rằng bảng dp được thêm vào một cách tuần tự và chúng ta truy cập và tính trực tiếp từ bảng đó . Và do đó ta gọi phương pháp này là tabulation ( lập bảng)
MEMOZATION METHOD- TOP DOWN DYNAMIC PROGRAMMING
Phương pháp memozation rất giống với phương pháp chia để trị, tức là ta chi nhỏ bài toán thành các bài toán con, sau đó đi tìm lời giải các bài toán con, để tổng hợp thành lời giải cho bài toán ban đầu. Nhưng khác phương pháp chia để trị ở chỗ là phương pháp này nó giúp ta ghi nhớ lời giải các bài toán con để có thể tái sử dụng chúng cho các problem khác nên nó cũng được gọi là phương pháp ghi nhớ.
Ta thấy rằng lời giải của các bài toán con được lưu vào mảng dp[]
Tham khảo: https://www.geeksforgeeks.org/






































