โปรแกรมแบบไม่ตายตัวเป็นวิธีการที่ใช้แก้ปัญหาที่ซับซ้อน โดยการแยกมันออกเป็นโจทย์ย่อยที่ง่ายกว่านี้ โดยมันมีประสิทธิภาพพิเศษสําหรับปัญหาการทําให้ง่ายขึ้น และที่เกี่ยวข้องกับการซ้อนทับกันของปัญหา บทความนี้สํารวจกลยุทธ์ต่าง ๆ ของปัญหาโดยใช้โปรแกรมแบบไดนามิกส์ผ่านการศึกษาและการคํานวณ
การสร้างโปรแกรมแบบไม่ตายตัว
โปรแกรมที่ไม่ตายตัวจะใช้ในการเก็บผลการประมวลผลแบบอนุภาพ เพื่อหลีกเลี่ยงการคํานวณซ้ํา ซึ่งใช้เทคนิคนี้เมื่อมีปัญหาเกิดขึ้นสองคุณสมบัติ: การซ้อนค่าและโครงสร้างย่อยที่เหมาะสมที่สุด สามารถนําไปใช้ได้ทั้งการเพิ่มข้อมูลบนลงล่าง (ค่าน้อย) หรือการเติมข้อมูลด้านล่าง (การไล่ระดับความจุ)
การ ศึกษา กรณี:
ลําดับอาร์บอกัสเป็นตัวอย่างคลาสสิก สําหรับการสาธิตการเขียนโปรแกรมแบบไดนามิค เป้าหมายคือหาจํานวนคาร์โบไฮเดรตที่ n ได้อย่างมีประสิทธิภาพ
การใช้การเกิดขึ้นอีกแบบไร้เดียงสา ความซับซ้อนของเวลานั้นเพิ่มขึ้นอย่างมหาศาล โปรแกรมที่คํานวณได้ลดความซับซ้อนลง
ตัวอย่างเช่น เพื่อคํานวณ FTP( 10):
FIND( 10) = FIND( 9) + Axregator( 8)
โดย เก็บ โบ ฮี เมีย (8) และ ฟี โบ นาคิ ม (9) การ คํานวณ ถูก ลด ลง ทํา ให้ มี การ เพิ่ม ประสิทธิภาพ อย่าง มาก.
การ ศึกษา กรณี: ปัญหา ของ แจ็ก เกต
ปัญหา กระเป๋า เป้ 0/1 (kaptsack) เกี่ยวข้องกับการเลือกรายการที่มีน้ําหนักที่เพิ่ม และค่าที่เพิ่มมา เพื่อให้ค่าทั้งหมดสูงสุดโดยไม่ต้องจํากัดน้ําหนักเกิน
โปรแกรมที่คํานวณได้อัตโนมัตินี้ โดยการสร้างตาราง โดยแต่ละรายการแทนค่าสูงสุดที่ access value โดยมีสับเซตของรายการ และค่าน้ําหนักเฉพาะ
การ คํานวณ เกี่ยว ข้อง กับ การ ทํา ตัว ให้ เป็น ตัว จริง โดย ผ่าน รายการ ต่าง ๆ และ ปรับ ปรุง ตาราง โดย อาศัย ว่า ของ นั้น จะ ปรับ ปรุง ราคา รวม หรือ ไม่.
ข้อ แนะ สําหรับ การ ลด ความ หนัก
กลยุทธ์ที่สําคัญคือ การกําหนดสถานะย่อยที่ชัดเจน, เลือกโครงสร้างข้อมูลที่เหมาะสม และปรับแต่งความซับซ้อนของอวกาศให้เหมาะสมที่สุดเมื่อเป็นไปได้ การทําเมโมอิตสามารถใช้เพื่อเก็บผลในการแก้ปัญหาแบบสรุปได้ ในขณะที่การแท็บสร้างวิธีแก้ปัญหาได้โดยสมบูรณ์
- ระบุคําค้นทับกัน
- กําหนดตัวพิมพ์เล็ก- ใหญ่
- ใช้โครงสร้างข้อมูลที่เหมาะสม
- ปรับค่าความซับซ้อนของพื้นที่และเวลา