ในคณิตศาสตร์ วิทยาการคอมพิวเตอร์ และเศรษฐศาสตร์ กำหนดการพลวัต (อังกฤษ: dynamic programming) คือกระบวนการหาค่าเหมาะที่สุด โดยแก้ไขปัญหาที่ซับซ้อนโดยการแบ่งปัญหาให้เป็นปัญหาย่อยที่สามารถแก้ได้ง่ายกว่าในลักษณะของการเรียกซ้ำ คุณสมบัติพื้นฐานของปัญหาที่จะใช้กำหนดการพลวัตได้คือจะต้องมีกัน (overlapping subproblem) และโครงสร้างย่อยที่เหมาะสมที่สุด (optimal substructure) ปัญหาที่ใช้กำหนดการพลวัตในการแก้ปัญหาจะใช้เวลาแก้รวดเร็วกว่าการแก้ปัญหาโดยตรงเป็นอย่างมาก
หลักสำคัญของกำหนดการพลวัตมาจากการสังเกตว่าในการแก้ปัญหาที่ซับซ้อนนั้น จำเป็นที่จะต้องแก้ปัญหาที่เล็กกว่า (ปัญหาย่อย) และนำคำตอบของปัญหาย่อยเหล่านั้นมารวมกันเป็นคำตอบของปัญหาใหญ่ และในการดำเนินการแก้ปัญหาย่อยนี้ มีหลายปัญหาที่ปัญหาย่อยบางส่วนเหมือนกันทุกประการ ดังนั้นแทนที่จะแก้ไขปัญหาย่อยเหล่านี้ซ้ำอีกรอบ กระบวนการกำหนดการพลวัตจะใช้วิธีแก้ไขปัญหาย่อยเหล่านี้เพียงแค่ครั้งเดียว และเก็บคำตอบไว้ หรือที่เรียกว่า (memoization; ระวังสะกดเป็น memorization) เมื่อพบปัญหาย่อยดังกล่าวอีกครั้งก็ไม่จำเป็นต้องคำนวณซ้ำใหม่ แต่สามารถเรียกคำตอบที่เก็บไว้มาใช้ได้เลย กระบวนการนี้จะมีประสิทธิภาพดีเป็นอย่างยิ่งเมื่อปัญหาที่จะแก้มีจำนวนปัญหาย่อยที่ทับซ้อนกันเป็นจำนวนมาก ซึ่งหากไม่ได้ใช้กำหนดการพลวัตจะทำให้จำนวนครั้งในการแก้ปัญหาย่อย ส่งผลให้เวลาในการแก้ไขปัญหาเพิ่มขึ้นเป็นอย่างมาก
ประวัติ
เป็นผุ้เริ่มใช้คำว่ากำหนดการพลวัต (dynamic programming) ในทศวรรตที่ 1940 และเปลี่ยนความหมายให้สมบูรณ์ยิ่งขึ้นในปี 1953
เบลแมนอธิบายที่มาของคำว่ากำหนดการพลวัต (dynamic programming) ในประวัติส่วนตัวของเขาชื่อ Eye of the Hurricane: An Autobiography ในปี 1984 ดังนี้
I spent the Fall quarter (of 1950) at RAND. My first task was to find a name for multistage decision processes. An interesting question is, Where did the name, dynamic programming, come from? The 1950s were not good years for mathematical research. We had a very interesting gentleman in Washington named Wilson. He was Secretary of Defense, and he actually had a pathological fear and hatred of the word, research. I’m not using the term lightly; I’m using it precisely. His face would suffuse, he would turn red, and he would get violent if people used the term, research, in his presence. You can imagine how he felt, then, about the term, mathematical. The RAND Corporation was employed by the Air Force, and the Air Force had Wilson as its boss, essentially. Hence, I felt I had to do something to shield Wilson and the Air Force from the fact that I was really doing mathematics inside the RAND Corporation. What title, what name, could I choose? In the first place I was interested in planning, in decision making, in thinking. But planning, is not a good word for various reasons. I decided therefore to use the word, “programming” I wanted to get across the idea that this was dynamic, this was multistage, this was time-varying I thought, lets kill two birds with one stone. Lets take a word that has an absolutely precise meaning, namely dynamic, in the classical physical sense. It also has a very interesting property as an adjective, and that is its impossible to use the word, dynamic, in a pejorative sense. Try thinking of some combination that will possibly give it a pejorative meaning. Its impossible. Thus, I thought dynamic programming was a good name. It was something not even a Congressman could object to. So I used it as an umbrella for my activities.
ภาพรวม
กำหนดการพลวัตในการเขียนโปรแกรมคอมพิวเตอร์
คุณลักษณะสำคัญ 2 ประการที่ต้องมีในการทำกำหนดการพลวัตคือโครงสร้างย่อยที่เหมาะสมที่สุด และ กัน ถ้าปัญหาที่ต้องการจะแก้นั้นมีโครงสร้างย่อยที่เหมาะสมที่สุด แต่ปัญหาย่อยนั้นไม่ทับซ้อนกันเลย จะเรียกวิธีการในการแก้ไขปัญหานี้ว่า ดังนั้น ถึงแม้ และ การเรียงลำดับแบบผสานจะมีคุณสมบัติโครงสร้างย่อยที่เหมาะสมที่สุด แต่ก็ไม่จัดให้เป็นวิธีการกำหนดการพลวัต เพราะไม่มีปัญหาย่อยที่ทับซ้อนกัน แต่จัดให้เป็นวิธีการการแบ่งแยกและเอาชนะแทน
โครงสร้างย่อยที่เหมาะสมที่สุด หมายความว่าคำตอบที่ดีที่สุดของปัญหาย่อยหนึ่ง สามารถเกิดจากการนำคำตอบที่ดีที่สุดของปัญหาย่อยที่เล็กกว่าทั้งหลายมาประกอบกันได้ ดังนั้นขั้นตอนการประดิษฐ์วิธีการกำหนดการพลวัตก็จะเริ่มจากการค้นหาก่อนว่าปัญหาที่จะแก้มีโครงสร้างย่อยที่เหมาะสมที่สุดหรือไม่ ซึ่งโดยส่วนใหญ่แล้วจะอธิบายโครงสร้างย่อยที่เหมาะสมที่สุดด้วยสมการการเรียกซ้ำ (สมการเวียนเกิด) ยกตัวอย่างเช่น กำหนดกราฟ G = (V, E) มาให้ วิถีสั้นสุด p จากจุดยอด u ถึงจุดยอด v แสดงให้เห็นถึงคุณสมบัติโครงสร้างย่อยที่เหมาะสมที่สุด ด้วยความจริงที่ว่า ถ้า p เป็นวิถีสั้นสุดจริง ๆ แล้ว สำหรับทุก ๆ จุดยอด w ที่อยู่ระหว่างทางของวิถีสั้นสุด p จะทำให้ ระยะทางของวิถีสั้นสุดจาก u ถึง w รวมกับระยะทางของวิถีสั้นสุดจาก w ถึง v มีค่าเท่ากับระยะทางของวิถีสั้นสุดจาก u ถึง v ดังนั้นจึงสามารถประดิษฐ์ขั้นตอนวิธีกำหนดการพลวัตโดยอิงจากข้อเท็จจริงนี้ขึ้นได้ ซึ่งก็คือ ขั้นตอนวิธีของเบลแมน-ฟอร์ด หรือ ขั้นตอนวิธีของฟลอยด์-วอร์แชล
ปัญหาย่อยที่ทับซ้อนกัน หมายความว่าอัตราส่วนระหว่างจำนวนปัญหาย่อยที่แตกต่างกันกับจำนวนปัญหาย่อยทั้งหมดต้องต่ำมาก หรือนั่นก็คือในการคำนวณหาคำตอบจะต้องเกิดการคำนวณปัญหาย่อยเดิม ๆ ซ้ำกันหลาย ๆ รอบ แทนที่จะเกิดปัญหาย่อยใหม่ที่ไม่เกิดการคำนวณซ้ำกันเลยมากมาย ยกตัวอย่างเช่นการคำนวณหาเลขฟีโบนัชชีตามความสัมพันธ์เวียนเกิด Fi = Fi−1 + Fi−2 โดยมีกรณีฐานคือ F0 = 0 และ F1 = 1 จะเห็นได้ว่า F5 = F4 + F3 และ F4 = F3 + F2 สังเกตว่า F3 นั้นเป็นพจน์ที่จะต้องคำนวณในการหาทั้ง F5 และ F4 ซึ่ง F3 ก็คือปัญหาย่อยที่ทับซ้อนกันนั่นเอง
ถึงแม้ว่าจำนวนครั้งที่ปัญหาย่อยที่ทับซ้อนกันต้องคำนวณซ้ำจะดูเหมือนน้อย แต่หากเกิดการคำนวณเวียนเกิดโดยไม่ได้ใช้กำหนดการพลวัต จำนวนครั้งที่ปัญหาย่อยที่ทับซ้อนกันในชั้นล่างของการคำนวณเวียนเกิดจะมีจำนวนมหาศาล โดยจะมีจำนวนเทียบกับขนาดของข้อมูลนำเข้า เช่นในการคำนวณ F5 อาจจะมีการคำนวณ F2 เพียงแค่ 3 ครั้ง แต่เมื่อขนาดข้อมูลนำเข้าเพิ่มขึ้นเช่นต้องในคำนวณ F20 จะมีการคำนวณ F2 ถึง 4181 ครั้ง การใช้วิธีการกำหนดการพลวัตจะทำให้การแก้ไขปัญหาย่อยนั้นเกิดขึ้นเพียงแค่ครั้งเดียวเสมอ หรือนั่นก็คือจะไม่เกิดการแก้ไขปัญหาย่อยเดิมซ้ำเลย
วิธีการกำหนดการพลวัตอาจอิมพลีเมนต์ได้ 2 วิธี
- วิธีการจาก โดยเป็นการเรียกใช้คล้ายกับการแก้ไขปัญหาโดยไม่ใช้กำหนดการพลวัต แต่หากพบว่าเป็นการแก้ไขปัญหาย่อยนั้นครั้งแรกก็ให้จำคำตอบของปัญหาย่อยดังกล่าวไว้ในตาราง จากนั้นเมื่อมีการเรียกใช้ฟังก์ชันให้แก้ไขปัญหาย่อยดังกล่าวอีกรอบก็สามารถนำค่าจากตารางมาเป็นคำตอบได้เลยโดยไม่ต้องคำนวณใหม่อีกรอบ และเรียกกระบวนการในการจำคำตอบในตารางขณะเรียกใช้ฟังก์ชันเวียนเกิดว่า "การจำ" (memoization)
- วิธีการจาก เป็นวิธีการที่สังเกตทิศทางของการแก้ไขปัญหาแบบเวียนเกิด แล้วมาเขียนโปรแกรมให้แก้ไขปัญหาย่อยที่สุดก่อนไปเรื่อย ๆ จนได้คำตอบ ซึ่งเป็นทิศทางที่สวนทางกันกับวิธีการจากบนลงล่างนั่นเอง ยกตัวอย่างเช่นสังเกตว่าหากมีค่า F5 กับ F6 ก็จะสามารถหา F7 ได้อย่างง่ายดาย ดังนั้นทิศทางของการหาเลขฟีโบนัชชีก็คือคำนวณ F1, F2, F3 ไปเรื่อย ๆ จนถึง Fn ซึ่งเป็นคำตอบนั่นเอง
ในการเขียนโปรแกรม บางภาษาโปรแกรมสามารถทำได้โดยอัตโนมัติ โดยอาจเป็นความสามารถพื้นฐาน (เช่นภาษาโปรล็อก และ โดยใช้คีย์เวิร์ดว่า M.) หรืออาจเป็นไลบรารีมาตรฐาน (เช่นภาษาเพิร์ล ภาษา Scheme ) หรืออาจเป็นส่วนเสริม (เช่นภาษาซีพลัสพลัส ดูที่)
อ้างอิง
- S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani, 'Algorithms', p 173, available at http://www.cs.berkeley.edu/~vazirani/algorithms.html
- (PDF). คลังข้อมูลเก่าเก็บจากแหล่งเดิม (PDF)เมื่อ 2005-01-10. สืบค้นเมื่อ 2013-01-20.
- "M. Memo". J Vocabulary. J Software. สืบค้นเมื่อ 28 October 2011.
- . คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2006-09-02. สืบค้นเมื่อ 2013-02-11.
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
inkhnitsastr withyakarkhxmphiwetxr aelaesrsthsastr kahndkarphlwt xngkvs dynamic programming khuxkrabwnkarhakhaehmaathisud odyaekikhpyhathisbsxnodykaraebngpyhaihepnpyhayxythisamarthaekidngaykwainlksnakhxngkareriyksa khunsmbtiphunthankhxngpyhathicaichkahndkarphlwtidkhuxcatxngmikn overlapping subproblem aelaokhrngsrangyxythiehmaasmthisud optimal substructure pyhathiichkahndkarphlwtinkaraekpyhacaichewlaaekrwderwkwakaraekpyhaodytrngepnxyangmak hlksakhykhxngkahndkarphlwtmacakkarsngektwainkaraekpyhathisbsxnnn caepnthicatxngaekpyhathielkkwa pyhayxy aelanakhatxbkhxngpyhayxyehlannmarwmknepnkhatxbkhxngpyhaihy aelainkardaeninkaraekpyhayxyni mihlaypyhathipyhayxybangswnehmuxnknthukprakar dngnnaethnthicaaekikhpyhayxyehlanisaxikrxb krabwnkarkahndkarphlwtcaichwithiaekikhpyhayxyehlaniephiyngaekhkhrngediyw aelaekbkhatxbiw hruxthieriykwa memoization rawngsakdepn memorization emuxphbpyhayxydngklawxikkhrngkimcaepntxngkhanwnsaihm aetsamartheriykkhatxbthiekbiwmaichidely krabwnkarnicamiprasiththiphaphdiepnxyangyingemuxpyhathicaaekmicanwnpyhayxythithbsxnknepncanwnmak sunghakimidichkahndkarphlwtcathaihcanwnkhrnginkaraekpyhayxy sngphlihewlainkaraekikhpyhaephimkhunepnxyangmakprawtiepnphuerimichkhawakahndkarphlwt dynamic programming inthswrrtthi 1940 aelaepliynkhwamhmayihsmburnyingkhuninpi 1953 eblaemnxthibaythimakhxngkhawakahndkarphlwt dynamic programming inprawtiswntwkhxngekhachux Eye of the Hurricane An Autobiography inpi 1984 dngni I spent the Fall quarter of 1950 at RAND My first task was to find a name for multistage decision processes An interesting question is Where did the name dynamic programming come from The 1950s were not good years for mathematical research We had a very interesting gentleman in Washington named Wilson He was Secretary of Defense and he actually had a pathological fear and hatred of the word research I m not using the term lightly I m using it precisely His face would suffuse he would turn red and he would get violent if people used the term research in his presence You can imagine how he felt then about the term mathematical The RAND Corporation was employed by the Air Force and the Air Force had Wilson as its boss essentially Hence I felt I had to do something to shield Wilson and the Air Force from the fact that I was really doing mathematics inside the RAND Corporation What title what name could I choose In the first place I was interested in planning in decision making in thinking But planning is not a good word for various reasons I decided therefore to use the word programming I wanted to get across the idea that this was dynamic this was multistage this was time varying I thought lets kill two birds with one stone Lets take a word that has an absolutely precise meaning namely dynamic in the classical physical sense It also has a very interesting property as an adjective and that is its impossible to use the word dynamic in a pejorative sense Try thinking of some combination that will possibly give it a pejorative meaning Its impossible Thus I thought dynamic programming was a good name It was something not even a Congressman could object to So I used it as an umbrella for my activities phaphrwmkarhawithisnsudphayinkrafodyichkhunsmbtiokhrngsrangyxythiehmaasmthisud esntrngaesdngthungesnechuxmkhxngkraf esnokhngaesdngthungwithisnsudrahwangcudyxd esnhnaaesdngthungwithisnsudcakcudyxderimtnthungcudyxdepahmaykahndkarphlwtinkarekhiynopraekrmkhxmphiwetxr khunlksnasakhy 2 prakarthitxngmiinkarthakahndkarphlwtkhuxokhrngsrangyxythiehmaasmthisud aela kn thapyhathitxngkarcaaeknnmiokhrngsrangyxythiehmaasmthisud aetpyhayxynnimthbsxnknely caeriykwithikarinkaraekikhpyhaniwa dngnn thungaem aela kareriyngladbaebbphsancamikhunsmbtiokhrngsrangyxythiehmaasmthisud aetkimcdihepnwithikarkahndkarphlwt ephraaimmipyhayxythithbsxnkn aetcdihepnwithikarkaraebngaeykaelaexachnaaethn okhrngsrangyxythiehmaasmthisud hmaykhwamwakhatxbthidithisudkhxngpyhayxyhnung samarthekidcakkarnakhatxbthidithisudkhxngpyhayxythielkkwathnghlaymaprakxbknid dngnnkhntxnkarpradisthwithikarkahndkarphlwtkcaerimcakkarkhnhakxnwapyhathicaaekmiokhrngsrangyxythiehmaasmthisudhruxim sungodyswnihyaelwcaxthibayokhrngsrangyxythiehmaasmthisuddwysmkarkareriyksa smkarewiynekid yktwxyangechn kahndkraf G V E maih withisnsud p cakcudyxd u thungcudyxd v aesdngihehnthungkhunsmbtiokhrngsrangyxythiehmaasmthisud dwykhwamcringthiwa tha p epnwithisnsudcring aelw sahrbthuk cudyxd w thixyurahwangthangkhxngwithisnsud p cathaih rayathangkhxngwithisnsudcak u thung w rwmkbrayathangkhxngwithisnsudcak w thung v mikhaethakbrayathangkhxngwithisnsudcak u thung v dngnncungsamarthpradisthkhntxnwithikahndkarphlwtodyxingcakkhxethccringnikhunid sungkkhux khntxnwithikhxngeblaemn fxrd hrux khntxnwithikhxngflxyd wxraechl aephnphngkarkhanwnhaelkhfiobnchchi odyrwbpyhayxythithbsxnekhadwykn thaihidaephnphngimepnkraftnim pyhayxythithbsxnkn hmaykhwamwaxtraswnrahwangcanwnpyhayxythiaetktangknkbcanwnpyhayxythnghmdtxngtamak hruxnnkkhuxinkarkhanwnhakhatxbcatxngekidkarkhanwnpyhayxyedim saknhlay rxb aethnthicaekidpyhayxyihmthiimekidkarkhanwnsaknelymakmay yktwxyangechnkarkhanwnhaelkhfiobnchchitamkhwamsmphnthewiynekid Fi Fi 1 Fi 2 odymikrnithankhux F0 0 aela F1 1 caehnidwa F5 F4 F3 aela F4 F3 F2 sngektwa F3 nnepnphcnthicatxngkhanwninkarhathng F5 aela F4 sung F3 kkhuxpyhayxythithbsxnknnnexng aephnphngkarkhanwnhaelkhfiobnchchiphcnthi 5 odyimidichkahndkarphlwt thungaemwacanwnkhrngthipyhayxythithbsxnkntxngkhanwnsacaduehmuxnnxy aethakekidkarkhanwnewiynekidodyimidichkahndkarphlwt canwnkhrngthipyhayxythithbsxnkninchnlangkhxngkarkhanwnewiynekidcamicanwnmhasal odycamicanwnethiybkbkhnadkhxngkhxmulnaekha echninkarkhanwn F5 xaccamikarkhanwn F2 ephiyngaekh 3 khrng aetemuxkhnadkhxmulnaekhaephimkhunechntxnginkhanwn F20 camikarkhanwn F2 thung 4181 khrng karichwithikarkahndkarphlwtcathaihkaraekikhpyhayxynnekidkhunephiyngaekhkhrngediywesmx hruxnnkkhuxcaimekidkaraekikhpyhayxyedimsaely withikarkahndkarphlwtxacximphliemntid 2 withi withikarcak odyepnkareriykichkhlaykbkaraekikhpyhaodyimichkahndkarphlwt aethakphbwaepnkaraekikhpyhayxynnkhrngaerkkihcakhatxbkhxngpyhayxydngklawiwintarang caknnemuxmikareriykichfngkchnihaekikhpyhayxydngklawxikrxbksamarthnakhacaktarangmaepnkhatxbidelyodyimtxngkhanwnihmxikrxb aelaeriykkrabwnkarinkarcakhatxbintarangkhnaeriykichfngkchnewiynekidwa karca memoization withikarcak epnwithikarthisngektthisthangkhxngkaraekikhpyhaaebbewiynekid aelwmaekhiynopraekrmihaekikhpyhayxythisudkxniperuxy cnidkhatxb sungepnthisthangthiswnthangknkbwithikarcakbnlnglangnnexng yktwxyangechnsngektwahakmikha F5 kb F6 kcasamarthha F7 idxyangngayday dngnnthisthangkhxngkarhaelkhfiobnchchikkhuxkhanwn F1 F2 F3 iperuxy cnthung Fn sungepnkhatxbnnexng inkarekhiynopraekrm bangphasaopraekrmsamarththaidodyxtonmti odyxacepnkhwamsamarthphunthan echnphasaoprlxk aela odyichkhiyewirdwa M hruxxacepnilbrarimatrthan echnphasaephirl phasa Scheme hruxxacepnswnesrim echnphasasiphlsphls duthi xangxingS Dasgupta C H Papadimitriou and U V Vazirani Algorithms p 173 available at http www cs berkeley edu vazirani algorithms html PDF khlngkhxmulekaekbcakaehlngedim PDF emux 2005 01 10 subkhnemux 2013 01 20 M Memo J Vocabulary J Software subkhnemux 28 October 2011 khlngkhxmulekaekbcakaehlngedimemux 2006 09 02 subkhnemux 2013 02 11