डायनेमिक प्रोग्रामिंग उस “कला” को दर्शाता है जिसमें किसी वर्तमान स्थिति का निर्माण पहले से ज्ञात स्थितियों के आधार पर किया जाता है। गणनाओं के दौरान, हम अकसर पूर्व में की गई गणनाओं के मूल्यों पर निर्भर रहते हैं। फ़िबोनाची संख्याएँ इसका एक अच्छा उदाहरण हैं जिन्हें डायनेमिक प्रोग्रामिंग के द्वारा निकाला जा सकता है:
उदाहरण के लिए, fib(2) की गणना करने के लिए हम fib(1) और fib(0) का उपयोग करते हैं, जिससे हमें fib(2) = 1 प्राप्त होता है। इसी तरह अगले फ़िबोनाची नंबर के लिए, पहले से प्राप्त मान का उपयोग करना चाहिए – जैसे fib(3) = fib(2) + fib(1) = 1 + 1 = 2। इसी क्रम में fib(4) = fib(3) + fib(2) = 2 + 1 = 3 और fib(5) = fib(4) + fib(3) = 3 + 2 = 5 इत्यादि क्रमशः चलते जाते हैं।
प्रत्येक पुनरावृत्ति में, हम अपने पिछले गणितीय मानों (पिछली स्थितियों) के आधार पर फ़िबोनाची श्रेणी का नया मान निकालते हैं। इसे हम एक सूची की सहायता से इस तरह लागू कर सकते हैं:
n = ...
fib = [0, 1] # fib[0] = 0, fib[1] = 1 (प्रारंभिक मान)
for i in range(2, n + 1):
fib.append(fib[i - 1] + fib[i - 2])
print(fib[n])
यदि n = 5 है, तो प्रोग्राम 5 को प्रदर्शित करेगा, और यदि n = 7 है, तो 13 को।
पिछले स्थितियों का बार-बार उपयोग करके वर्तमान स्थिति (जैसे यहाँ वर्तमान फ़िबोनाची संख्या) निकालने की प्रक्रिया ही डायनेमिक प्रोग्रामिंग का मूल सिद्धांत है।
💡
डायनेमिक प्रोग्रामिंग एक तकनीक है जिसमें वर्तमान स्थिति को पिछली स्थितियों के आधार पर तैयार किया जाता है।
चुनौती - ट्रिबोनाची संख्याएँ
फ़िबोनाची संख्याओं से खेलने के बाद आपने सोचा कि अब ट्रिबोनाची संख्याओं को आज़माया जाए। ट्रिबोनाची संख्याओं को इस तरह परिभाषित किया गया है:
आपका कार्य n-वाँ ट्रिबोनाची नंबर निकालना है।
इनपुट
इनपुट में एक एकल पूर्णांक n दिया होगा (1 ≤ n ≤ 30)।