มีความแตกต่างพื้นฐานระหว่างการเขียนโปรแกรมแบบไดนามิกจากบนลงล่างและล่างขึ้นบนหรือไม่?
โดยเฉพาะมีปัญหาที่สามารถแก้ไขจากล่างขึ้นบน แต่ไม่ใช่จากบนลงล่างได้หรือไม่ หรือวิธีการจากล่างขึ้นบนเป็นเพียงการคลี่คลายของการเกิดซ้ำในวิธีการจากบนลงล่าง?
มีความแตกต่างพื้นฐานระหว่างการเขียนโปรแกรมแบบไดนามิกจากบนลงล่างและล่างขึ้นบนหรือไม่?
โดยเฉพาะมีปัญหาที่สามารถแก้ไขจากล่างขึ้นบน แต่ไม่ใช่จากบนลงล่างได้หรือไม่ หรือวิธีการจากล่างขึ้นบนเป็นเพียงการคลี่คลายของการเกิดซ้ำในวิธีการจากบนลงล่าง?
คำตอบ:
ในการใช้วิธี bottom-up คุณจะต้องสามารถกำหนดได้อย่างมีประสิทธิภาพว่า "bottom" คืออะไรซึ่งมักจะหมายความว่าคุณต้องการพื้นที่ปัญหาที่ จำกัด อย่างมาก หากคุณรู้ว่าการคำนวณในระดับต่ำสุดจะเป็นอย่างไรและลำดับการขึ้นต่อกันจะขึ้นอยู่กับว่าจะทำซ้ำในลำดับที่เหมาะสมและเก็บผลลัพธ์เหล่านั้น แฟกทอเรียลไร้เดียงสา Fibonacci และความสัมพันธ์ที่เกิดซ้ำของออยเลอร์สำหรับพาร์ติชันล้วนเป็นตัวอย่างที่ดีของปัญหาที่เหมาะสมกับแนวทางนี้
ปัญหาบางอย่างไม่มีลำดับล่างสุดหรือการพึ่งพาที่กำหนดได้ง่ายสำหรับการคำนวณ ยกตัวอย่างเช่นการประเมินตำแหน่งหมากรุกจะถูกบันทึกไว้อย่างเป็นประโยชน์ตามตำแหน่งพร้อมคะแนนการประเมินที่เก็บไว้ดังนั้นจึงไม่จำเป็นต้องคำนวณใหม่ ตำแหน่งสามารถเกิดขึ้นอีกได้ในหลายระดับของแผนผังการค้นหาเนื่องจากย้ายการขนย้ายและการทำซ้ำดังนั้นการบันทึกผลการประเมินจึงคุ้มค่า แต่ไม่มีทางที่จะรู้ว่าตำแหน่งที่อยู่ในระดับต่ำสุดของต้นไม้จะเป็นอย่างไรโดยไม่ต้องลงไปซ้ำ ๆ ซ้ำ ๆ (และคำนึงถึงการตัดแต่งกิ่งกลาง) ดังนั้นการเลื่อนจากบนลงล่างจึงเป็นวิธีที่เป็นไปได้เท่านั้น
วิธีการจากบนลงล่าง: นี่คือการตกหล่นโดยตรงของสูตรซ้ำของปัญหาใด ๆ หากการแก้ปัญหาใด ๆ สามารถกำหนดแบบวนซ้ำได้โดยใช้วิธีแก้ปัญหาย่อยและหากปัญหาย่อยทับซ้อนกันจะสามารถบันทึกหรือเก็บวิธีแก้ปัญหาย่อยไว้ในตารางได้อย่างง่ายดาย เมื่อใดก็ตามที่เราพยายามที่จะแก้ปัญหาย่อยใหม่เราจะตรวจสอบตารางก่อนเพื่อดูว่ามันได้รับการแก้ไขแล้วหรือไม่ หากมีการบันทึกโซลูชันเราสามารถใช้โดยตรงมิฉะนั้นเราจะแก้ปัญหาย่อยและเพิ่มโซลูชันลงในตาราง
วิธีการจากล่างขึ้นบน: เมื่อเรากำหนดวิธีการแก้ปัญหาแบบวนซ้ำในแง่ของปัญหาย่อยเราสามารถลองปฏิรูปปัญหาแบบล่างขึ้นบน: ลองแก้ปัญหาย่อยก่อนและใช้วิธีแก้ปัญหาเพื่อสร้าง ในและมาถึงการแก้ปัญหาย่อยที่ใหญ่กว่า สิ่งนี้มักจะทำในรูปแบบตารางโดยทำซ้ำการแก้ปัญหาย่อยที่ใหญ่กว่าและใหญ่กว่าโดยใช้วิธีแก้ปัญหาย่อย ตัวอย่างเช่นหากเราทราบค่าของ F41 และ F40 แล้วเราสามารถคำนวณค่าของ F42 ได้โดยตรง