इलियास डेल्टा कोडिंग: Difference between revisions
No edit summary |
No edit summary |
||
Line 2: | Line 2: | ||
== एन्कोडिंग == | == एन्कोडिंग == | ||
किसी संख्या X ≥ 1 कोड करने के लिए: | किसी संख्या X ≥ 1 को कोड करने के लिए: | ||
# मान लीजिए N= ⌊log<sub>2</sub> | # मान लीजिए 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> | # मान लीजिए 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 के अग्रणी बिट ( | # X के अग्रणी बिट (अर्थात अंतिम N बिट्स) को छोड़कर सभी है। | ||
उसी प्रक्रिया को व्यक्त करने | उसी प्रक्रिया को व्यक्त करने की समकक्ष विधि: | ||
#X को | #X को 2 की उच्चतम घात में भिन्न करें (2<sup>N</sup>) और शेष N बाइनरी अंक है। | ||
#[[इलियास गामा कोडिंग]] के साथ | #[[इलियास गामा कोडिंग]] के साथ N+1 को एन्कोड किया जाता है। | ||
#शेष N बाइनरी अंकों को N+1 के इस प्रतिनिधित्व में | #शेष N बाइनरी अंकों को N+1 के इस प्रतिनिधित्व में जोड़ा जाता है। | ||
किसी संख्या का प्रतिनिधित्व करने के लिए <math>x</math>, एलियास डेल्टा (δ) का उपयोग | किसी संख्या का प्रतिनिधित्व करने के लिए <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>\gamma'</math> का उपयोग प्रारंभ होता है: | ||
{| class="wikitable" | {| class="wikitable" | ||
! | ! नंबर !! 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 1 01 ''0000''</code> || 1/512 | | 16 = 2<sup>4</sup> + ''0'' || 4 || 5 || <code>00 1 01 ''0000''</code> || 1/512 | ||
|- | |- | ||
| 17 | | 17=2<sup>4</sup>+''1'' || 4 || 5 || {{nowrap|<code>00 1 01 ''0001''</code>}} || 1/512 | ||
|} | |} | ||
एलियास डेल्टा-कोडित पूर्णांक को डीकोड करने के लिए: | एलियास डेल्टा-कोडित पूर्णांक को डीकोड करने के लिए: | ||
# | #जब तक आप पूर्व शून्य तक नहीं पहुंच जाते, तब तक स्ट्रीम से शून्य पढ़ें और गिनें। शून्य की इस गिनती को 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 और बिट्स | 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 घटाना है। | ||
सभी पूर्णांकों को कोड करने का एक तरीका यह है कि सभी पूर्णांकों (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 को कोड करने के लिए:
- मान लीजिए N= ⌊log2 X⌋; X में 2 का उच्चतम घात हो, इसलिए 2N ≤ X < 2N+1 है।
- मान लीजिए L = ⌊log2 N+1⌋ N+1 में 2 की उच्चतम घात है, इसलिए 2L ≤ N+1 < 2L+1 है।
- L शून्य लिखें, उसके पश्चात
- N+1 का L+1-बिट बाइनरी प्रतिनिधित्व, उसके पश्चात
- X के अग्रणी बिट (अर्थात अंतिम N बिट्स) को छोड़कर सभी है।
उसी प्रक्रिया को व्यक्त करने की समकक्ष विधि:
- X को 2 की उच्चतम घात में भिन्न करें (2N) और शेष N बाइनरी अंक है।
- इलियास गामा कोडिंग के साथ N+1 को एन्कोड किया जाता है।
- शेष 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 |
एलियास डेल्टा-कोडित पूर्णांक को डीकोड करने के लिए:
- जब तक आप पूर्व शून्य तक नहीं पहुंच जाते, तब तक स्ट्रीम से शून्य पढ़ें और गिनें। शून्य की इस गिनती को L कहा जाता है।
- 2 के मान के साथ, जो पूर्णांक तक पहुंच गया था उसे पहला अंक मानते हुएL, पूर्णांक के शेष L अंक पढ़ें। इस पूर्णांक को N+1 कहें और N प्राप्त करने के लिए एक घटाएँ।
- हमारे अंतिम आउटपुट के पहले स्थान पर एक रखें, जो मान 2 दर्शाता हैएन.
- निम्नलिखित एन अंकों को पढ़ें और जोड़ें।
उदाहरण:
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.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.
अग्रिम पठन
- Hamada, Hozumi (June 1983). "URR: Universal representation of real numbers". New Generation Computing. 1 (2): 205–209. doi:10.1007/BF03037427. ISSN 0288-3635. S2CID 12806462. Retrieved 2018-07-09. (NB. The Elias δ code coincides with Hamada's URR representation.)