ฉันทำงานเกี่ยวกับการเขียนโปรแกรมแบบไดนามิกมาระยะหนึ่งแล้ว วิธีบัญญัติของการประเมินการเรียกใช้การเขียนโปรแกรมแบบไดนามิกคือการสร้างตารางของค่าที่จำเป็นทั้งหมดและกรอกข้อมูลทีละแถว ดูตัวอย่างจากCormen, Leiserson และ al: "Introduction to Algorithms"สำหรับการแนะนำ
ฉันมุ่งเน้นที่รูปแบบการคำนวณบนโต๊ะในสองมิติ (การกรอกข้อมูลแบบแถวต่อแถว) และตรวจสอบโครงสร้างของการพึ่งพาเซลล์นั่นคือเซลล์ใดที่ต้องทำก่อนที่จะคำนวณอื่นได้ เราแสดงด้วยชุดของดัชนีของเซลล์ที่เซลล์ของฉันขึ้นอยู่กับ โปรดทราบว่าΓจะต้องไม่มีรอบ
ฉันสรุปจากฟังก์ชันจริงที่คำนวณและมีสมาธิกับโครงสร้างแบบเรียกซ้ำ อย่างเป็นทางการผมพิจารณา recurrrence ที่จะเขียนโปรแกรมแบบไดนามิกถ้ามันมีรูปแบบ
กับ , ~ Γ d ( ฉัน ) = { ( J , d ( ญ ) ) | เจ ∈ Γ d ( ฉัน ) }และฉบางคน (คำนวณ) ฟังก์ชั่นที่ไม่ได้ ใช้วันที่อื่นที่ไม่ใช่ผ่าน~ Γ d
เมื่อการ จำกัด ความละเอียดของไปยังพื้นที่ขรุขระ (ไปทางซ้าย, ซ้าย - บน, บน - ขวา, ... ของเซลล์ปัจจุบัน) หนึ่งสังเกตว่ามีสามกรณี (ถึงสมมาตรและการหมุน) ที่ถูกต้อง การเรียกโปรแกรมแบบไดนามิกที่แจ้งวิธีเติมตาราง:
พื้นที่สีแดงหมายถึง (overapproximations ของ) Γกรณีที่หนึ่งและสองยอมรับชุดย่อยกรณีที่สามคือกรณีที่เลวร้ายที่สุด (สูงถึงการแปลงดัชนี) โปรดทราบว่าไม่จำเป็นต้องใช้อย่างเคร่งครัดว่าทั้งพื้นที่สีแดงถูกปกคลุมไปด้วยΓ ; เซลล์บางส่วนในทุกส่วนสีแดงของตารางเพียงพอที่จะทาสีแดง พื้นที่สีขาวจำเป็นต้องมีการอธิบายเพื่อไม่ให้มีเซลล์ที่ต้องการ
ตัวอย่างสำหรับกรณีหนึ่งมีการแก้ไขระยะทางและsubsequence ทั่วไปที่ยาวที่สุดกรณีสองนำไปใช้กับยามและฟอร์ดและCYK ตัวอย่างที่เห็นได้ชัดน้อยกว่านั้นรวมถึงสิ่งที่ทำงานบนแนวทแยงมุมแทนที่จะเป็นแถว (หรือคอลัมน์) เนื่องจากสามารถหมุนได้เพื่อให้เหมาะสมกับกรณีที่เสนอ ดูคำตอบของโจสำหรับตัวอย่าง
ฉันไม่มีตัวอย่าง (ธรรมชาติ) สำหรับกรณีที่สามแม้ว่า ดังนั้นคำถามของฉันคืออะไรคือตัวอย่างของกรณีที่การเรียกซ้ำ / ปัญหาการเขียนโปรแกรมแบบไดนามิกสามกรณี