मैंने विभिन्न तरीकों से कोड (जावा में) को लागू करने का प्रयास किया जिसके द्वारा फाइबोनैकी अनुक्रम की nth अवधि की गणना की जा सकती है और मैं जो कुछ सीखा है उसे सत्यापित करने की उम्मीद कर रहा हूं।विभिन्न फाइबोनैकी कार्यान्वयन के लिए बिग-ओ
public int memoizedFibonacci(int n)
{
if (n <= 0) return -1;
else if (n == 1) return 0;
else if (n == 2) return 1;
if (memory[n-1] == 0)
memory[n-1] = memoizedFibonacci(n-1);
if (memory[n-2] == 0)
memory[n-2] = memoizedFibonacci(n-2);
return memory[n-1]+memory[n-2];
}
मैं -:
public int recursiveFibonacci(int n)
{
if (n == 1) return 0;
else if (n == 2) return 1;
return recursiveFibonacci(n-1) + recursiveFibonacci(n-2);
}
memoized कार्यान्वयन इस प्रकार है: -
public int iterativeFibonacci(int n)
{
if (n == 1) return 0;
else if (n == 2) return 1;
int i = 0, j = 1, sum = 0;
for (; (n-2) != 0; --n)
{
sum = i + j;
i = j;
j = sum;
}
return sum;
}
पुनरावर्ती कार्यान्वयन इस प्रकार है:
पुनरावृत्ति कार्यान्वयन इस प्रकार है इन कार्यान्वयन के बिग-ओ को समझने की कोशिश करते समय मुझे कुछ संदेह है। मेरा मानना है कि ओ (एन) होने के लिए पुनरावृत्ति कार्यान्वयन के रूप में यह एन -2 बार के माध्यम से loops।
पुनरावर्ती कार्य में, मूल्यों को फिर से तैयार किया जाता है, इसलिए मुझे लगता है कि यह ओ (एन^2) है।
ज्ञापन समारोह में, आधे से अधिक मानों को ज्ञापन के आधार पर एक्सेस किया जाता है। मैंने पढ़ा है कि एक एल्गोरिदम ओ (लॉग एन) है यदि समस्या द्वारा समस्या स्थान को कम करने में लगातार समय लगता है और एक एल्गोरिदम ओ (एन) है यदि समस्या समस्या को कम करने में निरंतर समय लगता है निरंतर राशि। क्या मैं यह मानने में सही हूं कि ज्ञापन कार्यान्वयन जटिलता में ओ (एन) है? यदि हां, तो क्या पुनरावृत्ति कार्यान्वयन तीनों में सबसे अच्छा नहीं होगा? (क्योंकि यह अतिरिक्त स्मृति का उपयोग नहीं करता है जो ज्ञापन की आवश्यकता है)।
प्रोग्रामिंग प्रतियोगिताओं में इन जैसे रैखिक पुनरावृत्ति की समस्याएं आमतौर पर "मैट्रिक्स एक्सपोनिएशन" के माध्यम से हल की जाती हैं। इस [ब्लॉगपोस्ट] (http://fusharblog.com/solving-linear-recurrence-for-programming-contest/) में फिबोनाची श्रृंखला के लिए एक सी ++ उदाहरण है। – plesiv