इलियास डेल्टा कोडिंग: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 2: Line 2:


== एन्कोडिंग ==
== एन्कोडिंग ==
किसी संख्या X ≥ 1 कोड करने के लिए:
किसी संख्या X ≥ 1 को कोड करने के लिए:
# मान लीजिए N= ⌊log<sub>2</sub> एक्स⌋; X में 2 की उच्चतम शक्ति हो, इसलिए 2<sup>एन</sup> ≤<sup>एन+1</sup>.
# मान लीजिए N= ⌊log<sub>2</sub> ''X''⌋; X में 2 का उच्चतम घात हो, इसलिए 2<sup>''N''</sup> ≤ ''X'' < 2<sup>''N''+1</sup> है।
# मान लीजिए L = ⌊log<sub>2</sub> N+1⌋ N+1 में 2 की उच्चतम घात है, इसलिए 2<sup>एल</sup> ≤ एन+1 <2<sup>एल+1</sup>.
# मान लीजिए L = ⌊log<sub>2</sub> N+1⌋ N+1 में 2 की उच्चतम घात है, इसलिए 2<sup>''L''</sup> ≤ ''N''+1 < 2<sup>''L''+1</sup> है।
# L शून्य लिखें, उसके बाद
# L शून्य लिखें, उसके पश्चात
# N+1 का L+1-बिट बाइनरी प्रतिनिधित्व, उसके बाद
# N+1 का L+1-बिट बाइनरी प्रतिनिधित्व, उसके पश्चात
# X के अग्रणी बिट (यानी अंतिम N बिट्स) को छोड़कर सभी।
# X के अग्रणी बिट (अर्थात अंतिम N बिट्स) को छोड़कर सभी है।


उसी प्रक्रिया को व्यक्त करने का एक समकक्ष तरीका:
उसी प्रक्रिया को व्यक्त करने की समकक्ष विधि:
#X को इसमें मौजूद 2 की उच्चतम घात में अलग करें (2<sup>N</sup>) और शेष N बाइनरी अंक।
#X को 2 की उच्चतम घात में भिन्न करें (2<sup>N</sup>) और शेष N बाइनरी अंक है।
#[[इलियास गामा कोडिंग]] के साथ एन+1 को एन्कोड करें।
#[[इलियास गामा कोडिंग]] के साथ N+1 को एन्कोड किया जाता है।
#शेष N बाइनरी अंकों को N+1 के इस प्रतिनिधित्व में जोड़ें।
#शेष N बाइनरी अंकों को N+1 के इस प्रतिनिधित्व में जोड़ा जाता है।


किसी संख्या का प्रतिनिधित्व करने के लिए <math>x</math>, एलियास डेल्टा (δ) का उपयोग करें। <math>\lfloor \log_2(x) \rfloor  + 2 \lfloor \log_2 (\lfloor \log_2(x) \rfloor +1) \rfloor + 1</math> बिट्स<ref name="Elias"/>{{rp|200}}
किसी संख्या का प्रतिनिधित्व करने के लिए <math>x</math>, एलियास डेल्टा (δ) का उपयोग किया जाता है। <math>\lfloor \log_2(x) \rfloor  + 2 \lfloor \log_2 (\lfloor \log_2(x) \rfloor +1) \rfloor + 1</math> बिट्स<ref name="Elias"/>{{rp|200}}यह अधिक बड़े पूर्णांकों के लिए उपयोगी है, जहां समग्र एन्कोडेड प्रतिनिधित्व के बिट्स कम हो जाते हैं [एलियास गामा कोडिंग का उपयोग करके प्राप्त की जा सकने वाली राशि से] <math>\log_2 (\lfloor \log_2(x) \rfloor +1)</math> पूर्व अभिव्यक्ति का भाग है।
यह बहुत बड़े पूर्णांकों के लिए उपयोगी है, जहां समग्र एन्कोडेड प्रतिनिधित्व के बिट्स कम हो जाते हैं [एलियास गामा कोडिंग का उपयोग करके प्राप्त की जा सकने वाली राशि से] <math>\log_2 (\lfloor \log_2(x) \rfloor +1)</math> पिछली अभिव्यक्ति का भाग.


कोड का उपयोग शुरू होता है <math>\gamma'</math> के बजाय <math>\gamma</math>:
कोड <math>\gamma'</math> का उपयोग प्रारंभ होता है:


{| class="wikitable"
{| class="wikitable"
! Number !! N !! N+1 !! δ encoding !! Implied probability
! नंबर !! N !! N+1 !! δ एन्कोडिंग !! निहित संभावना
|-
|-
| 1 = 2<sup>0</sup> || 0 || 1 || <code>1</code> || 1/2
| 1 = 2<sup>0</sup> || 0 || 1 || <code>1</code> || 1/2
Line 62: Line 61:
| 16 = 2<sup>4</sup> + ''0'' || 4 || 5 || <code>00&thinsp;1&thinsp;01 ''0000''</code> || 1/512
| 16 = 2<sup>4</sup> + ''0'' || 4 || 5 || <code>00&thinsp;1&thinsp;01 ''0000''</code> || 1/512
|-
|-
| 17&nbsp;=&nbsp;2<sup>4</sup>&nbsp;+&nbsp;''1'' || 4 || 5 || {{nowrap|<code>00&thinsp;1&thinsp;01 ''0001''</code>}} || 1/512
| 17=2<sup>4</sup>+''1'' || 4 || 5 || {{nowrap|<code>00&thinsp;1&thinsp;01 ''0001''</code>}} || 1/512
|}
|}
एलियास डेल्टा-कोडित पूर्णांक को डीकोड करने के लिए:
एलियास डेल्टा-कोडित पूर्णांक को डीकोड करने के लिए:
#स्ट्रीम से शून्य पढ़ें और गिनें जब तक कि आप पहले शून्य तक पहुंच जाएं। शून्य की इस गिनती को L कहें।
#जब तक आप पूर्व शून्य तक नहीं पहुंच जाते, तब तक स्ट्रीम से शून्य पढ़ें और गिनें। शून्य की इस गिनती को L कहा जाता है।
#2 के मान के साथ, जो पूर्णांक तक पहुंच गया था उसे पहला अंक मानते हुए<sup>L</sup>, पूर्णांक के शेष L अंक पढ़ें। इस पूर्णांक को N+1 कहें और N प्राप्त करने के लिए एक घटाएँ।
#2 के मान के साथ, जो पूर्णांक तक पहुंच गया था उसे पहला अंक मानते हुए<sup>L</sup>, पूर्णांक के शेष L अंक पढ़ें। इस पूर्णांक को N+1 कहें और N प्राप्त करने के लिए एक घटाएँ।
#हमारे अंतिम आउटपुट के पहले स्थान पर एक रखें, जो मान 2 दर्शाता है<sup>एन</sup>.
#हमारे अंतिम आउटपुट के पहले स्थान पर एक रखें, जो मान 2 दर्शाता है<sup>एन</sup>.
Line 73: Line 72:
  001010011
  001010011
  1. 001 में 2 अग्रणी शून्य
  1. 001 में 2 अग्रणी शून्य
  2. 2 और बिट्स यानी 00101 पढ़ें
  2. 2 और बिट्स अर्थात 00101 पढ़ें
  3. डिकोड N+1 = 00101 = 5
  3. डिकोड N+1 = 00101 = 5
  4. संपूर्ण कोड के लिए N = 5 - 1 = 4 शेष बिट प्राप्त करें अर्थात '0011'
  4. संपूर्ण कोड के लिए N = 5 - 1 = 4 शेष बिट प्राप्त करें अर्थात '0011'
Line 144: Line 143:
{{See also|Variable-length quantity#Zigzag encoding}}
{{See also|Variable-length quantity#Zigzag encoding}}
एलियास डेल्टा कोडिंग शून्य या नकारात्मक पूर्णांक को कोड नहीं करती है।
एलियास डेल्टा कोडिंग शून्य या नकारात्मक पूर्णांक को कोड नहीं करती है।
सभी गैर-नकारात्मक पूर्णांकों को कोड करने का एक तरीका कोडिंग से पहले 1 जोड़ना और फिर डिकोडिंग के बाद 1 घटाना है।
सभी गैर-नकारात्मक पूर्णांकों को कोड करने का एक तरीका कोडिंग से पहले 1 जोड़ना और फिर डिकोडिंग के पश्चात 1 घटाना है।
सभी पूर्णांकों को कोड करने का एक तरीका यह है कि सभी पूर्णांकों (0, 1, −1, 2, −2, 3, −3, ...) को सख्ती से धनात्मक पूर्णांकों (1, 2, 3,) में मैप करके एक आक्षेप स्थापित किया जाए। कोडिंग से पहले 4, 5, 6, 7, ...)
सभी पूर्णांकों को कोड करने का एक तरीका यह है कि सभी पूर्णांकों (0, 1, −1, 2, −2, 3, −3, ...) को सख्ती से धनात्मक पूर्णांकों (1, 2, 3,) में मैप करके एक आक्षेप स्थापित किया जाए। कोडिंग से पहले 4, 5, 6, 7, ...)
यह आक्षेप डेटा क्रमांकन प्रारूपों की तुलना का उपयोग करके किया जा सकता है प्रोटोकॉल बफ़र्स से ज़िगज़ैग एन्कोडिंग ([[ज़िगज़ैग कोड]] के साथ भ्रमित न हों, न ही JPEG#Entropy_coding|JPEG ज़िग-ज़ैग एन्ट्रॉपी कोडिंग)।
यह आक्षेप डेटा क्रमांकन प्रारूपों की तुलना का उपयोग करके किया जा सकता है प्रोटोकॉल बफ़र्स से ज़िगज़ैग एन्कोडिंग ([[ज़िगज़ैग कोड]] के साथ भ्रमित न हों, न ही JPEG#Entropy_coding|JPEG ज़िग-ज़ैग एन्ट्रॉपी कोडिंग)।

Revision as of 20:09, 12 December 2023

एलियास δ कोड या एलियास डेल्टा कोड पीटर एलियास द्वारा विकसित धनात्मक पूर्णांकों को एन्कोड करने वाला सार्वभौमिक कोड है।[1]: 200 

एन्कोडिंग

किसी संख्या X ≥ 1 को कोड करने के लिए:

  1. मान लीजिए N= ⌊log2 X⌋; X में 2 का उच्चतम घात हो, इसलिए 2NX < 2N+1 है।
  2. मान लीजिए L = ⌊log2 N+1⌋ N+1 में 2 की उच्चतम घात है, इसलिए 2LN+1 < 2L+1 है।
  3. L शून्य लिखें, उसके पश्चात
  4. N+1 का L+1-बिट बाइनरी प्रतिनिधित्व, उसके पश्चात
  5. X के अग्रणी बिट (अर्थात अंतिम N बिट्स) को छोड़कर सभी है।

उसी प्रक्रिया को व्यक्त करने की समकक्ष विधि:

  1. X को 2 की उच्चतम घात में भिन्न करें (2N) और शेष N बाइनरी अंक है।
  2. इलियास गामा कोडिंग के साथ N+1 को एन्कोड किया जाता है।
  3. शेष N बाइनरी अंकों को N+1 के इस प्रतिनिधित्व में जोड़ा जाता है।

किसी संख्या का प्रतिनिधित्व करने के लिए , एलियास डेल्टा (δ) का उपयोग किया जाता है। बिट्स[1]: 200 यह अधिक बड़े पूर्णांकों के लिए उपयोगी है, जहां समग्र एन्कोडेड प्रतिनिधित्व के बिट्स कम हो जाते हैं [एलियास गामा कोडिंग का उपयोग करके प्राप्त की जा सकने वाली राशि से] पूर्व अभिव्यक्ति का भाग है।

कोड का उपयोग प्रारंभ होता है:

नंबर N N+1 δ एन्कोडिंग निहित संभावना
1 = 20 0 1 1 1/2
2 = 21 + 0 1 2 0 1 0 0 1/16
3 = 21 + 1 1 2 0 1 0 1 1/16
4 = 22 + 0 2 3 0 1 1 00 1/32
5 = 22 + 1 2 3 0 1 1 01 1/32
6 = 22 + 2 2 3 0 1 1 10 1/32
7 = 22 + 3 2 3 0 1 1 11 1/32
8 = 23 + 0 3 4 00 1 00 000 1/256
9 = 23 + 1 3 4 00 1 00 001 1/256
10 = 23 + 2 3 4 00 1 00 010 1/256
11 = 23 + 3 3 4 00 1 00 011 1/256
12 = 23 + 4 3 4 00 1 00 100 1/256
13 = 23 + 5 3 4 00 1 00 101 1/256
14 = 23 + 6 3 4 00 1 00 110 1/256
15 = 23 + 7 3 4 00 1 00 111 1/256
16 = 24 + 0 4 5 00 1 01 0000 1/512
17=24+1 4 5 00 1 01 0001 1/512

एलियास डेल्टा-कोडित पूर्णांक को डीकोड करने के लिए:

  1. जब तक आप पूर्व शून्य तक नहीं पहुंच जाते, तब तक स्ट्रीम से शून्य पढ़ें और गिनें। शून्य की इस गिनती को L कहा जाता है।
  2. 2 के मान के साथ, जो पूर्णांक तक पहुंच गया था उसे पहला अंक मानते हुएL, पूर्णांक के शेष L अंक पढ़ें। इस पूर्णांक को N+1 कहें और N प्राप्त करने के लिए एक घटाएँ।
  3. हमारे अंतिम आउटपुट के पहले स्थान पर एक रखें, जो मान 2 दर्शाता हैएन.
  4. निम्नलिखित एन अंकों को पढ़ें और जोड़ें।

उदाहरण:

001010011
1. 001 में 2 अग्रणी शून्य
2. 2 और बिट्स अर्थात 00101 पढ़ें
3. डिकोड N+1 = 00101 = 5
4. संपूर्ण कोड के लिए N = 5 - 1 = 4 शेष बिट प्राप्त करें अर्थात '0011'
5. एन्कोडेड संख्या = 24+3=19

इस कोड को एलियास गामा कोडिंग#सामान्यीकरण में वर्णित तरीकों से शून्य या नकारात्मक पूर्णांकों में सामान्यीकृत किया जा सकता है।

उदाहरण कोड

एन्कोडिंग

void eliasDeltaEncode(char* source, char* dest)
{
    IntReader intreader(source);
    BitWriter bitwriter(dest);
    while (intreader.hasLeft())
    {
        int num = intreader.getInt();
        int len = 0;
        int lengthOfLen = 0;

        len = 1 + floor(log2(num));  // calculate 1+floor(log2(num))
        lengthOfLen = floor(log2(len)); // calculate floor(log2(len))
      
        for (int i = lengthOfLen; i > 0; --i)
            bitwriter.outputBit(0);
        for (int i = lengthOfLen; i >= 0; --i)
            bitwriter.outputBit((len >> i) & 1);
        for (int i = len-2; i >= 0; i--)
            bitwriter.outputBit((num >> i) & 1);
    }
    bitwriter.close();
    intreader.close();
}

डिकोडिंग

void eliasDeltaDecode(char* source, char* dest)
{
    BitReader bitreader(source);
    IntWriter intwriter(dest);
    while (bitreader.hasLeft())
    {
        int num = 1;
        int len = 1;
        int lengthOfLen = 0;
        while (!bitreader.inputBit())     // potentially dangerous with malformed files.
            lengthOfLen++;
        for (int i = 0; i < lengthOfLen; i++)
        {
            len <<= 1;
            if (bitreader.inputBit())
                len |= 1;
        }
        for (int i = 0; i < len-1; i++)
        {
            num <<= 1;
            if (bitreader.inputBit())
                num |= 1;
        }
        intwriter.putInt(num);            // write out the value
    }
    bitreader.close();
    intwriter.close();
}

सामान्यीकरण

एलियास डेल्टा कोडिंग शून्य या नकारात्मक पूर्णांक को कोड नहीं करती है। सभी गैर-नकारात्मक पूर्णांकों को कोड करने का एक तरीका कोडिंग से पहले 1 जोड़ना और फिर डिकोडिंग के पश्चात 1 घटाना है। सभी पूर्णांकों को कोड करने का एक तरीका यह है कि सभी पूर्णांकों (0, 1, −1, 2, −2, 3, −3, ...) को सख्ती से धनात्मक पूर्णांकों (1, 2, 3,) में मैप करके एक आक्षेप स्थापित किया जाए। कोडिंग से पहले 4, 5, 6, 7, ...) यह आक्षेप डेटा क्रमांकन प्रारूपों की तुलना का उपयोग करके किया जा सकता है प्रोटोकॉल बफ़र्स से ज़िगज़ैग एन्कोडिंग (ज़िगज़ैग कोड के साथ भ्रमित न हों, न ही JPEG#Entropy_coding|JPEG ज़िग-ज़ैग एन्ट्रॉपी कोडिंग)।

यह भी देखें

  • एलियास गामा कोडिंग|एलियास गामा (γ) कोडिंग
  • एलियास ओमेगा कोडिंग|एलियास ओमेगा (ω) कोडिंग
  • गोलोम्ब-चावल कोड

संदर्भ

  1. 1.0 1.1 Elias, Peter (March 1975). "Universal codeword sets and representations of the integers". IEEE Transactions on Information Theory. 21 (2): 194–203. doi:10.1109/tit.1975.1055349.

अग्रिम पठन