Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में जेकेंडोर्फ प्रमेय (Zeckendorf's Theorem) प्रोग्राम


जेकेंडोर्फ प्रमेय क्या है?

जेकेंडोर्फ प्रमेय के अनुसार, प्रत्येक धनात्मक पूर्णांक को गैर-आसन्न फाइबोनैचि संख्याओं के योग के रूप में विशिष्ट रूप से दर्शाया जा सकता है। अर्थात, कोई भी दो क्रमागत फाइबोनैचि संख्याओं का उपयोग नहीं किया जाता।

उदाहरण के लिए, यदि दिया गया योग मान 10 है, तो यह 8 और 2 का योग है। 8 और 2 दोनों फाइबोनैचि पद हैं और वे आसन्न नहीं हैं।

एल्गोरिदम

nonNeighbourFibo(sum):
Begin
    while sum > 0:
        fibo := सबसे बड़ा फाइबोनैचि पद लेकिन sum से बड़ा नहीं
        print fibo
        sum := sum - fibo
    done
End

उदाहरण

#include <iostream>
using namespace std;

// n से छोटा या बराबर सबसे बड़ा फाइबोनैचि नंबर लौटाता है
int fibonacci(int n) {
    if (n == 0 || n == 1)
        return n;

    int prev = 0, curr = 1, next = 1;
    while (next <= n) {
        prev = curr;
        curr = next;
        next = prev + curr;
    }
    return curr;
}

void nonNeighbourFibo(int sum) {
    while (sum > 0) {
        int fibo = fibonacci(sum);
        cout << fibo << " ";
        sum = sum - fibo;
    }
}

int main() {
    int sum = 120;
    cout << "Sum is same as Non-adjacent Fibonacci terms: ";
    nonNeighbourFibo(sum);
    return 0;
}

आउटपुट

Sum is same as Non-adjacent Fibonacci terms: 89 21 8 2

सत्यापन

89 + 21 + 8 + 2 = 120 ✓
फाइबोनैचि अनुक्रम: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144...
इस्तेमाल किए गए: 89, 21, 8, 2 (कोई भी आसन्न नहीं) ✓

अधिक उदाहरण

संख्या जेकेंडोर्फ प्रतिनिधित्व
10 8 + 2
100 89 + 8 + 3
50 34 + 13 + 3
1000 987 + 13

ग्रीडी एल्गोरिदम क्यों काम करता है

जेकेंडोर्फ प्रमेय गारंटी देता है कि सबसे बड़ा संभव फाइबोनैचि नंबर चुनने का ग्रीडी दृष्टिकोण हमेशा इष्टतम (और अद्वितीय) प्रतिनिधित्व देता है। यह फाइबोनैचि संख्याओं के गुण से आता है: F(k) = F(k-1) + F(k-2) और F(k) > F(k-1) + F(k-3) + ...

समय जटिलता

O(log n × log n) - प्रत्येक चरण में फाइबोनैचि खोज O(log n) और अधिकतम O(log n) चरण

  1. C++ में पिरामिड के आयतन का प्रोग्राम C++ में पिरामिड के आयतन का प्रोग्राम

    पिरामिड के बेस के प्रकार के आधार पर भुजाएं दी गई हैं, कार्य पिरामिड का आयतन गणना करना है।पिरामिड एक 3-D आकृति है जिसकी बाहरी सतहें त्रिकोणीय हैं जो सामान्य बिंदु पर मिलती हैं जिससे पिरामिड का तीक्ष्ण किनारा बनता है। पिरामिड का आयतन उसके बेस के प्रकार पर निर्भर करता है।पिरामिड के बेस के विभिन्न प्रका

  1. C++ में क्विकसॉर्ट प्रोग्राम C++ में क्विकसॉर्ट प्रोग्राम

    क्विकसॉर्ट क्या है? क्विकसॉर्ट एक सॉर्टिंग तकनीक है जो अनसॉर्टेड सूची (सरणी) को सॉर्ट करने के लिए तुलनाओं का उपयोग करती है। क्विकसॉर्ट को पार्टीशन एक्सचेंज सॉर्ट के नाम से भी जाना जाता है। यह एक स्थिर सॉर्ट नहीं है, क्योंकि समान सॉर्ट आइटम्स का सापेक्ष क्रम संरक्षित नहीं रहता। क्विकसॉर्ट एक सरणी प

  1. C++ में पहले n प्राकृतिक संख्याओं के वर्गों का योग C++ में पहले n प्राकृतिक संख्याओं के वर्गों का योग

    इस समस्या में हम देखेंगे कि पहले n प्राकृतिक संख्याओं के वर्गों का योग कैसे प्राप्त किया जा सकता है। यहां हम एक फॉर लूप का उपयोग कर रहे हैं, जो 1 से n तक चलता है। प्रत्येक चरण में हम पद का वर्ग निकाल रहे हैं और फिर इसे योग में जोड़ रहे हैं। यह प्रोग्राम पूरा होने में O(n) समय लेता है। लेकिन यदि हम