इलियास डेल्टा कोडिंग

From Vigyanwiki
Revision as of 14:26, 7 December 2023 by alpha>Indicwiki (Created page with "{{Use dmy dates|date=May 2019|cs1-dates=y}} एलियास δ कोड या एलियास डेल्टा कोड पीटर एलियास द्...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

एन्कोडिंग

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

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

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

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

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

कोड का उपयोग शुरू होता है के बजाय :

Number N N+1 δ encoding Implied probability
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.


अग्रिम पठन