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


9

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

มันหมายถึงความจริงที่ว่าปัญหาย่อยได้รับการแก้ไขในระหว่างการใช้งานและใช้ในการบรรลุเป้าหมายสุดท้ายหรือไม่? เช่นเดียวกับการจัดสรรหน่วยความจำแบบไดนามิกที่เกิดขึ้นระหว่างเวลาทำงาน?

[ตอบ]

ฉันควรจะมีการอ่านนี้บทความวิกิพีเดียก่อนที่จะถามคำถามที่เสียใจ


2
คำตอบสั้น ๆ มันเป็นแค่ชื่อ ไม่จำเป็นต้องมีความหมายที่แท้จริง
Yuval Filmus

4
การใช้งานทั่วไปของ DP (การเติมตาราง) นั้นคงที่ตามที่อัลกอริทึมสามารถทำได้
กราฟิลส์

คำตอบ:


1

ฉันมักจะพูดว่ามันหมายความว่าอัลกอริทึมที่ใช้การเขียนโปรแกรมแบบไดนามิกดูเหมือนจะแก้ไขพื้นที่ปัญหา " แบบไดนามิก " จนกระทั่งปัญหาสามารถแก้ไขได้ด้วยอัลกอริทึมโลภ

ตัวอย่างเช่นกับปัญหาCheckerboardอัลกอริธึมการเขียนโปรแกรมแบบไดนามิกจะแก้ไขทั้งบอร์ดเมื่อผ่านไปและในที่สุดก็สามารถใช้อัลกอริทึมโลภได้ (ในทำนองเดียวกันกับอัลกอริธึมเส้นทางลัดที่สั้นที่สุดของ Dijkstra เป็นต้น)

ฉันไม่แน่ใจว่าสิ่งนี้ทำให้เกิดปัญหาการเขียนโปรแกรมแบบไดนามิกทุกครั้ง


9

จริงๆแล้วไม่มีอะไรพิเศษในชื่อ "การเขียนโปรแกรมแบบไดนามิก"; เทคนิคนี้เป็นเพียงการเรียกซ้ำอย่างไม่ย่อท้อ ดูคำถามนี้และดูคำตอบ @Jeffe ซึ่งมีรายงานว่า Belman เลือกชื่อนั้นเพื่อเบี่ยงเบนความสนใจโดยเจตนา


3
ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
John Dvorak

คนที่วิกิพีเดียดูเหมือนจะไม่เห็นด้วยฉันเพิ่งพบสิ่งนี้ - มันเป็นแบบไดนามิกเพราะค่าในตารางนั้นเต็มไปด้วยอัลกอริธึมตามค่าอื่น ๆ ของตารางและการเขียนโปรแกรมในแง่ของการตั้งค่าสิ่งต่าง ๆ ในโต๊ะ การเขียนโปรแกรมเกี่ยวข้องกับเวลาออกอากาศสิ่งที่แสดง - ที่Wikibooks
kintoki

@akki: มีตัวอย่างของการเขียนโปรแกรมแบบไดนามิกซึ่งในตารางจะไม่จำเป็นที่ทุกคน ...
Massimo Cafaro

1
@akki: เป็นตัวอย่างการคำนวณตัวเลข Fibonacci ในลักษณะจากล่างขึ้นบนต้องใช้พื้นที่คงที่เท่านั้นเพื่อบันทึกหมายเลข Fibonacci ที่จำเป็นในการคำนวณตัวเลขถัดไปในชุด การคำนวณผลที่ตามมาสามัญที่ยาวที่สุดของสองสตริงความยาวและสามารถทำได้โดยใช้พื้นที่แทนตารางเต็มเป็นต้น O(1)mnO(min(m,n))mn
Massimo Cafaro

2
@ akki: นั่นคือสิ่งที่ฉันพูดถึงเมื่อฉันพูดว่า DP นั้นเกี่ยวกับการปลดปล่อยคำตอบอย่างฉลาด! แต่ชื่อตัวเองนั้นไร้จุดหมายและยังคงไร้จุดหมาย
Massimo Cafaro

6

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


1
แหล่งที่มาสำหรับสิ่งนี้? ดูเหมือนว่าเรื่องราวที่น่าสนใจจริงๆ
jmite

เช่นเดียวกับการบันทึกด้านข้าง: ดูเหมือนว่าไม่ชัดเจนว่าใครเป็นผู้คิดค้นการเขียนโปรแกรมแบบไดนามิกเป็นครั้งแรก Bellman ควรได้รับเครดิตสำหรับการพิสูจน์ว่าการใช้งานDynamic Programmingใด ๆเมื่อเหมาะสมที่สุดจะเป็นไปตามสมการ Bellman-Ford ที่เรียกว่าสมการ น่าเสียดายที่ดูเหมือนว่าหลายคนเชื่ออย่างง่ายดายว่าทำให้เบลแมนเป็นนักวิจัยหลักที่อยู่เบื้องหลังแนวคิดดั้งเดิม
คาร์ลอลีนาLópez

@jmite ฉันอ่านมันในบางแห่ง (อาจเป็นบล็อก) .. ฉันจะพยายามให้ที่มา ...
Subhayan

@jmite คุณสามารถค้นหาเรื่องราวในบันทึกการบรรยายของเจฟฟ์ของการบรรยายที่ 5: การเขียนโปรแกรมแบบไดนามิกและยังอยู่ในวิกิพีเดีย: การเขียนโปรแกรมแบบไดนามิก
hengxin

3

Richard Bellman เรียกมันว่า Dynamic Programming ในคำศัพท์ใน Bellman ป้อนคำอธิบายรูปภาพที่นี่

ฉันใช้เวลาช่วงไตรมาสฤดูใบไม้ร่วง (ของปี 1950) ที่ RAND งานแรกของฉันคือค้นหาชื่อสำหรับกระบวนการตัดสินใจหลายขั้นตอน

คำถามที่น่าสนใจคือไม่อยู่ที่ไหนชื่อการเขียนโปรแกรมแบบไดนามิกมาจากไหน? ปี 1950 ไม่ได้เป็นปีที่ดีสำหรับการวิจัยทางคณิตศาสตร์ เรามีสุภาพบุรุษที่น่าสนใจคนหนึ่งในวอชิงตันชื่อวิลสัน เขาเป็นรัฐมนตรีกลาโหมและจริง ๆ แล้วเขามีความกลัวและความเกลียดชังทางพยาธิวิทยาของการวิจัยคำ ฉันไม่ได้ใช้คำเบา ๆ ฉันใช้มันอย่างแม่นยำ ใบหน้าของเขาจะกระจายเขาจะเปลี่ยนเป็นสีแดงและเขาจะได้รับความรุนแรงถ้าคนที่ใช้ในการวิจัยระยะในการปรากฏตัวของเขา คุณสามารถจินตนาการว่าเขารู้สึกอย่างไรเกี่ยวกับคำศัพท์ทางคณิตศาสตร์ บริษัท RAND Corporation ได้รับการว่าจ้างจากกองทัพอากาศและกองทัพอากาศมี Wilson เป็นหัวหน้า ดังนั้นฉันรู้สึกว่าฉันต้องทำอะไรบางอย่างเพื่อป้องกัน Wilson และกองทัพอากาศจากข้อเท็จจริงที่ว่าฉันทำคณิตศาสตร์ใน RAND Corporation ชื่ออะไรชื่ออะไร ฉันเลือกได้ไหม ในตอนแรกฉันมีความสนใจในการวางแผนในการตัดสินใจในการคิด แต่การวางแผนไม่ใช่คำที่ดีด้วยเหตุผลหลายประการ ฉันจึงตัดสินใจใช้คำว่า "การเขียนโปรแกรม" ฉันอยากจะข้ามความคิดที่ว่านี่เป็นพลวัตนี่คือหลายขั้นตอนซึ่งแตกต่างกันไปตามเวลา ฉันคิดว่าเราจะฆ่านกสองตัวด้วยหินก้อนเดียว ลองมาคำที่มีความหมายที่แม่นยำอย่างแน่นอนคือแบบไดนามิกในความรู้สึกทางกายภาพคลาสสิก นอกจากนี้ยังมีคุณสมบัติที่น่าสนใจมากในฐานะที่เป็นคำคุณศัพท์และมันเป็นไปไม่ได้ที่จะใช้คำว่าไดนามิกในแง่ดูถูก ลองนึกถึงชุดค่าผสมที่อาจให้ความหมายที่ดูถูก มันเป็นไปไม่ได้. ดังนั้นฉันคิดว่าการเขียนโปรแกรมแบบไดนามิกเป็นชื่อที่ดี มันไม่ใช่สิ่งที่แม้แต่สมาชิกสภาผู้แทนราษฎรจะคัดค้าน

แหล่งที่มา: Eye of the Hurricane, Richard Bellman (อัตชีวประวัติ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.