फाइबोनैचि कोडिंग

गणित और कंप्यूटिंग में, फाइबोनैचि कोडिंग एक सार्वभौमिक कोड (डेटा संपीड़न) है जो धनात्मक पूर्णांकों को बाइनरी कोड शब्दों में कूटबद्ध करता है। यह फाइबोनैचि संख्याओं के आधार पर पूर्णांकों के निरूपण का एक उदाहरण है। प्रत्येक कोड शब्द 11 के साथ समाप्त होता है और अंत से पहले 11 का कोई अन्य उदाहरण नहीं होता है।

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

परिभाषा
एक नंबर के लिए $$N\!$$, अगर $$d(0),d(1),\ldots,d(k-1),d(k)\!$$ प्रतिनिधित्व करने वाले कोड शब्द के अंकों को निरूपित करें $$N\!$$ तो हमारे पास हैं:


 * $$N = \sum_{i=0}^{k-1} d(i) F(i+2),\text{ and }d(k-1)=d(k)=1.\!$$

कहाँ $F(i)$ है $i$वें फाइबोनैचि संख्या, और इसी तरह $F(i+2)$ है $i$वीं विशिष्ट फाइबोनैचि संख्या से शुरू होती है $$1,2,3,5,8,13,\ldots$$. आखिरी बिट $$d(k)$$ यह हमेशा 1 का एक संलग्न बिट होता है और इसमें स्थानीय मान नहीं होता है।

यह दिखाया जा सकता है कि ऐसी कोडिंग अद्वितीय है, और किसी भी कोड शब्द में 11 की एकमात्र घटना अंत में होती है यानी d(k−1) और d(k)। अंतिम बिट सबसे महत्वपूर्ण बिट है और पहला बिट सबसे कम महत्वपूर्ण बिट है। इसके अलावा अग्रणी शून्यों को छोड़ा नहीं जा सकता जैसा कि उदाहरण के लिए किया जा सकता है। दशमलव संख्याएं।

पहले कुछ फाइबोनैचि कोड नीचे दिखाए गए हैं, और उनके तथाकथित यूनिवर्सल कोड (डेटा संपीड़न)#व्यावहारिक संपीड़न से संबंध, प्रत्येक संख्या का मान जिसमें फाइबोनैचि कोडिंग में न्यूनतम आकार का कोड होता है।

किसी पूर्णांक N को एन्कोड करने के लिए:
 * 1) N के बराबर या उससे कम की सबसे बड़ी फाइबोनैचि संख्या ज्ञात करें; शेषफल का हिसाब रखते हुए, इस संख्या को N से घटाएँ।
 * 2) यदि घटाई गई संख्या 1वीं फाइबोनैचि संख्या F(i) थी, तो कोड वर्ड में i−2 के स्थान पर 1 लगाएं (सबसे बाएं अंक को 0 के रूप में गिनें)।
 * 3) N के लिए शेषफल प्रतिस्थापित करते हुए पिछले चरणों को दोहराएँ, जब तक कि शेषफल 0 न पहुँच जाए।
 * 4) कोड वर्ड में सबसे दाहिने अंक के बाद एक अतिरिक्त 1 लगाएं।

किसी कोड शब्द को डिकोड करने के लिए, अंतिम 1 को हटा दें, शेष मानों को 1,2,3,5,8,13... (फाइबोनैचि संख्या) को कोड शब्द में बिट्स पर निर्दिष्ट करें, और 1 के मानों का योग करें बिट्स

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

यह दृष्टिकोण - प्रतीकों के अनुक्रम का उपयोग करके एन्कोडिंग, जिसमें कुछ पैटर्न (जैसे 11) निषिद्ध हैं, को स्वतंत्र रूप से सामान्यीकृत किया जा सकता है।

उदाहरण
निम्न तालिका से पता चलता है कि संख्या 65 को फाइबोनैचि कोडिंग में 0100100011 के रूप में दर्शाया गया है, क्योंकि 65 = 2 + 8 + 55. पहले दो फाइबोनैचि संख्याओं (0 और 1) का उपयोग नहीं किया जाता है, और एक अतिरिक्त 1 हमेशा जोड़ा जाता है।


 * $$\begin{array}{ccccccccccc|c}

\hline 0 & 1 & 1 & 2 & 3 & 5 & 8 & 13 & 21 & 34 & 55 & - \\ \hline F(0) & F(1) & F(2) & F(3) & F(4) & F(5) & F(6) & F(7) & F(8) & F(9) & F(10) & \scriptstyle\text{additional} \\ \hline - & - & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 0 & 1 & 1 \\ \hline \end{array}$$

सामान्यीकरण
सकारात्मक पूर्णांकों के लिए फाइबोनैचि एन्कोडिंग बाइनरी स्ट्रिंग हैं जो 11 के साथ समाप्त होती हैं और 11 का कोई अन्य उदाहरण नहीं होता है। इसे बाइनरी स्ट्रिंग्स के लिए सामान्यीकृत किया जा सकता है जो एन लगातार 1 के साथ समाप्त होती हैं और इसमें लगातार एन 1 का कोई अन्य उदाहरण नहीं होता है। उदाहरण के लिए, N = 3 के लिए धनात्मक पूर्णांकों को 111, 0111, 00111, 10111, 000111, 100111, 010111, 110111, 0000111, 1000111, 0100111, ... के रूप में एन्कोड किया गया है। इस मामले में, स्ट्रिंग की लंबाई के एक फ़ंक्शन के रूप में एन्कोडिंग की संख्या ट्राइबोनैचि संख्याओं के अनुक्रम द्वारा दी गई है।

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

यह भी देखें

 * स्वर्णिम अनुपात आधार
 * नेगाफाइबोनैचि कोडिंग
 * ओस्ट्रोवस्की अंकन
 * यूनिवर्सल कोड (डेटा संपीड़न)
 * वेरीकोड, एक व्यावहारिक अनुप्रयोग
 * ज़ेकेंडोर्फ का प्रमेय
 * अधिकतम एन्ट्रापी रैंडम वॉक