การเขียนโปรแกรมแบบไดนามิกคืออะไร?

การเขียนโปรแกรมแบบไดนามิกเมื่ออ้างถึงสาขาวิทยาศาสตร์คอมพิวเตอร์อธิบายกลุ่มของอัลกอริทึมคอมพิวเตอร์ที่คล้ายกันหมายถึงการแก้ปัญหาที่ซับซ้อนโดยการแบ่งปัญหาออกเป็นชุดของปัญหาที่มีขนาดเล็กลง สร้างครั้งแรกโดย Richard Bellman ในปี 1950 การเขียนโปรแกรมแบบไดนามิกทำงานกับปัญหาที่เป็นปัญหาย่อยทับซ้อนหรือโครงสร้างย่อยที่ดีที่สุด เพื่อให้เข้าใจว่าการเขียนโปรแกรมแบบไดนามิกทำงานได้ดีที่สุดควรทำความเข้าใจแนวคิดเบื้องหลังคำสองคำนี้

ปัญหาย่อยที่ทับซ้อนกันอธิบายสมการที่ซับซ้อนซึ่งเมื่อแบ่งย่อยเป็นชุดสมการขนาดเล็กให้นำส่วนต่างๆของสมการขนาดเล็กมาใช้ซ้ำมากกว่าหนึ่งครั้งเพื่อให้ได้คำตอบ ตัวอย่างเช่นสมการทางคณิตศาสตร์บอกให้คำนวณผลลัพธ์ที่เป็นไปได้ทั้งหมดโดยใช้ชุดตัวเลขอาจคำนวณผลลัพธ์เดียวกันหลายครั้งในขณะที่คำนวณผลลัพธ์อื่นเพียงครั้งเดียว การเขียนโปรแกรมแบบไดนามิกจะบอกปัญหานี้ว่าหลังจากการคำนวณผลลัพธ์ในครั้งแรกควรบันทึกผลลัพธ์นั้นและเสียบคำตอบลงในสมการในภายหลังแทนการคำนวณอีกครั้ง เมื่อต้องรับมือกับกระบวนการและสมการที่ซับซ้อนซึ่งช่วยประหยัดเวลาและสร้างโซลูชันที่รวดเร็วยิ่งขึ้นโดยใช้ขั้นตอนที่น้อยลง

โครงสร้างย่อยที่เหมาะสมสร้างโซลูชันโดยค้นหาคำตอบที่ดีที่สุดสำหรับปัญหาย่อยทั้งหมดแล้วสร้างคำตอบโดยรวมที่ดีที่สุด หลังจากแยกแยะปัญหาที่ซับซ้อนเป็นปัญหาเล็ก ๆ คอมพิวเตอร์ก็ใช้ระบบคณิตศาสตร์เพื่อกำหนดว่าคำตอบที่ดีที่สุดสำหรับแต่ละปัญหาคืออะไร มันคำนวณคำตอบของปัญหาต้นฉบับจากคำตอบที่เล็กกว่า ข้อบกพร่องมีอยู่กับกระบวนการนี้ ในขณะที่มันให้วิธีการแก้ปัญหาที่ใช้งานได้ดีที่สุดในทางคณิตศาสตร์มันอาจจะใช่หรือไม่ใช่ทางออกที่ดีที่สุดในชีวิตจริงขึ้นอยู่กับประเภทของปัญหาและวิธีการที่เกี่ยวข้องกับโลกแห่งความจริง

ระหว่างการดำเนินการเหล่านี้อัลกอริทึมการเขียนโปรแกรมแบบไดนามิกพยายามค้นหาเส้นทางที่สั้นที่สุดไปยังโซลูชัน สามารถใช้หนึ่งในสองวิธีในการทำเช่นนี้ วิธีการจากบนลงล่างแบ่งสมการให้เป็นสมการที่เล็กลงและนำคำตอบกลับมาใช้สำหรับสมการเหล่านี้เมื่อจำเป็น วิธีการจากล่างขึ้นบนจะพยายามหาค่าทางคณิตศาสตร์ที่เล็กที่สุดหลังจากแบ่งสมการลงแล้วทำงานไปทางที่ใหญ่ที่สุดจากตรงนั้น ทั้งสองวิธีประหยัดเวลา แต่การโปรแกรมแบบไดนามิกใช้ได้เฉพาะเมื่อปัญหาดั้งเดิมสามารถแบ่งออกเป็นสมการขนาดเล็กซึ่งในบางจุดสามารถนำกลับมาใช้เพื่อแก้สมการได้