หากคุณสามารถเปลี่ยนชื่อการเขียนโปรแกรมแบบไดนามิกคุณจะเรียกมันว่าอะไร?
หากคุณสามารถเปลี่ยนชื่อการเขียนโปรแกรมแบบไดนามิกคุณจะเรียกมันว่าอะไร?
คำตอบ:
อัตชีวประวัติของ Richard Bellmanแนะนำว่าเขาเลือกคำว่า "การเขียนโปรแกรมแบบไดนามิก" เพื่อเบี่ยงเบนความสนใจโดยเจตนา
ปี 1950 ไม่ได้เป็นปีที่ดีสำหรับการวิจัยทางคณิตศาสตร์ เรามีสุภาพบุรุษที่น่าสนใจคนหนึ่งในวอชิงตันชื่อวิลสัน เขาเป็นรัฐมนตรีกลาโหมและจริง ๆ แล้วเขามีความกลัวและความเกลียดชังทางพยาธิวิทยาของคำว่า 'การวิจัย' ฉันไม่ได้ใช้คำเบา ๆ ฉันใช้มันอย่างแม่นยำ ใบหน้าของเขาจะขาดลอยเขาจะกลายเป็นสีแดงและเขาจะรุนแรงถ้าผู้คนใช้คำว่า 'การวิจัย' ในที่ที่เขาอยู่ คุณสามารถจินตนาการได้ว่าเขารู้สึกอย่างไรเกี่ยวกับคำว่า 'ทางคณิตศาสตร์' บริษัท แรนด์คอร์ปอเรชั่นได้รับการว่าจ้างจากกองทัพอากาศและกองทัพอากาศมีวิลสันเป็นเจ้านาย ดังนั้นฉันรู้สึกว่าฉันต้องทำอะไรบางอย่างเพื่อป้องกัน Wilson และกองทัพอากาศจากข้อเท็จจริงที่ว่าฉันกำลังทำคณิตศาสตร์ใน RAND Corporation
ฉันจะเลือกชื่ออะไรได้บ้าง ในตอนแรกฉันสนใจในการวางแผนในการตัดสินใจในการคิด แต่การวางแผนไม่ใช่คำที่ดีด้วยเหตุผลหลายประการ ฉันตัดสินใจใช้คำว่า 'Programming' ฉันอยากจะข้ามความคิดที่ว่ามันเป็นพลวัตนี่คือหลายขั้นตอนนี่คือเวลาที่แตกต่างกัน - ฉันคิดว่าเราจะฆ่านกสองตัวด้วยหินก้อนเดียว ลองมาคำที่มีความหมายที่แม่นยำอย่างแน่นอนคือ 'ไดนามิก' ในความรู้สึกทางกายภาพคลาสสิก นอกจากนี้ยังมีคุณสมบัติที่น่าสนใจมากในฐานะที่เป็นคำคุณศัพท์และนั่นเป็นไปไม่ได้ที่จะใช้คำว่า 'ไดนามิก' ในแง่ดูถูก ลองคิดถึงชุดค่าผสมที่อาจให้ความหมายที่ดูถูก มันเป็นไปไม่ได้. ดังนั้นฉันคิดว่า "การเขียนโปรแกรมแบบไดนามิก 'เป็นชื่อที่ดี มันไม่ใช่สิ่งที่แม้แต่สมาชิกสภาผู้แทนราษฎรจะคัดค้าน
(ในขณะที่รัสเซลและ Norvig ชี้ให้เห็นในตำราเรียน AI ของพวกเขาอย่างไรก็ตามเรื่องนี้จะต้องเป็นความคิดสร้างสรรค์ของความจริง Bellman ใช้วลี "การเขียนโปรแกรมแบบไดนามิก" ครั้งแรกในปี 1952และชาร์ลส์เออร์วินวิลสันไม่ได้เป็นกระทรวงกลาโหม )
อย่างไรก็ตามแรงจูงใจดั้งเดิมของ Bellman แสดงให้เห็นถึงการวางแผนแบบหลายขั้นตอนแต่อย่างน้อยสำหรับวัตถุประสงค์อัลกอริทึมฉันต้องการการเรียกซ้ำจากล่างขึ้นบนอย่างประหยัดเพียงมีพยางค์ที่น้อยลง
มีสองด้านที่สำคัญของ DP: (1) การกำหนดปัญหาย่อย (เช่นการตั้งค่า "ตาราง" ซึ่งอาจเป็นอาร์เรย์หลายมิติที่จัดทำดัชนีอาจโดยจำนวนเต็มจุดยอดย่อยของจุดยอดเป็นต้น) และ (2) การแก้ซ้ำ ปัญา ฉันเสนอ "การสอบถามซ้ำแบบตาราง / แบบตาราง" เป็นชื่อที่อ้างถึงทั้งสองด้าน
การบันทึกเป็นตัวแปรที่พบได้ทั่วไป
เพื่อไปกับหารและพิชิตฉันจะพูดว่าประกบกันและรวมกัน
ฉันมักจะใช้ทั้งสองคำประกบกันและรวมกันในขณะที่การสอน / การอธิบาย DP; แต่ไม่ได้ใช้การประกบกันและรวมอย่างชัดเจน บางครั้งฉันใช้การซ้อนทับ - หาร - และ - พิชิตเพื่อเปรียบเทียบสองกระบวนทัศน์
หลังจากการบรรยายล่าสุดของฉันเกี่ยวกับการเขียนโปรแกรมแบบไดนามิกในการออกแบบอัลกอริทึมฉันได้ขอให้นักเรียนแนะนำชื่อใหม่สำหรับเทคนิคนี้ ในขณะที่ฉันสนุกกับ "การเขียนโปรแกรมแบบยาก ๆ " ฉันต้องการบางสิ่งที่อาจทำให้เทคนิคน่าจดจำยิ่งขึ้น หลังจากการอภิปรายที่นี่ฉันอาจเสนอชื่อสองชื่อหนึ่งชื่อสำหรับจากบนลงล่างและอีกชื่อสำหรับจากล่างขึ้นบน:
Multiway-Divide และ Memoized-Conquer (aka Divide ^ M & Conquer ^ M) และ
รวม subproblems ทั้งหมด (aka Merge_all)
กระดาษนี้ ( paywalled doi ) เรียกปัญหาที่สามารถถูกโจมตีได้โดยใช้ DP "decomposable"
ผมพูดนี้กับเพื่อนร่วมงานบางอย่างเมื่อเร็ว ๆ นี้และหลังจากการอภิปรายอุ่นเรามาด้วยแคชโทรตาราง
ฉันขอแนะนำชื่อการเขียนโปรแกรมเชิงอุปนัย - เหมือนสะพานเล็ก ๆ ตั้งแต่สมัยเราไปจนถึงช่วงเวลาที่ดีของออยเลอร์เคปเลอร์และคณะ หรือแม้กระทั่งย้อนกลับการเขียนโปรแกรมอุปนัย และใช่สำหรับฉัน DP มีความสัมพันธ์อย่างมากกับการเหนี่ยวนำในแง่ดีของความคิด การบันทึก, การแคช, ตาราง ฯลฯ เป็นเพียงองค์ประกอบของเทคนิคไม่ใช่หลักของวิธีการที่จะถอดรหัสสิ่งต่างๆ
อาจเป็นสิ่งที่มีคำว่าตารางและเติมเช่นนี้เป็นสิ่งที่เกิดขึ้น
มุมมองแบบเรียกซ้ำหรือเส้นขอบฟ้าแบบเรียกซ้ำ
ฉันจะตั้งชื่อมันว่า "ส่งต่อการเรียกซ้ำด้วยบันทึก"