Python Programming: Dynamic Programming

Part 2: Introduction to Bottom-up Approach

Recap: แนวคิดแบบ Bottom-up

Top-down (แบบเดิม)

  • เริ่มจากโจทย์ใหญ่ (N) ➔ แตกเป็นโจทย์ย่อย
  • ใช้ Recursion + Memoization (สมุดจด)
  • ข้อจำกัด: ถ้า N เยอะมากๆ คอมพิวเตอร์อาจจะ Error (Recursion Limit Exceeded) เพราะเรียกซ้อนกันลึกเกินไป

Bottom-up (แบบใหม่)

  • ไม่เรียกซ้อน แต่เราจะ "วนลูป" สร้างคำตอบจากเล็กไปใหญ่
  • เหมือนการก่อกำแพงอิฐ ต้องเริ่มวางจากชั้นล่างสุดขึ้นไปชั้นบน
  • เปลี่ยนจาก "สมุดจด" เป็น "ตาราง" (List/Array)

ขั้นตอนการทำ Bottom-up (ตาราง)

1

สร้างตาราง (List/Array) ขนาด N + 1

2

ใส่ค่าเริ่มต้น (Base Case) ที่เรารู้อยู่แล้ว เช่น dp[0]=0, dp[1]=1

3

ใช้ For Loop วนเติมค่าในตารางตั้งแต่ช่องที่ 2 ไปจนถึงช่องสุดท้าย

4

คำตอบจะอยู่ที่ช่องสุดท้ายพอดี! return dp[N]