इलियास डेल्टा कोडिंग: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
इलियास δ कोड या '''इलियास डेल्टा कोड''' [[पीटर एलियास|पीटर इलियास]] द्वारा विकसित धनात्मक पूर्णांकों को एन्कोड करने वाला [[यूनिवर्सल कोड (डेटा संपीड़न)|सार्वभौमिक कोड]] है।<ref name="Elias"/>{{rp|200}} | |||
== एन्कोडिंग == | == एन्कोडिंग == | ||
Line 14: | Line 14: | ||
#शेष 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> का उपयोग प्रारंभ होता है: | कोड <math>\gamma'</math> का उपयोग प्रारंभ होता है: | ||
Line 63: | Line 63: | ||
| 17=2<sup>4</sup>+''1'' || 4 || 5 || {{nowrap|<code>00 1 01 ''0001''</code>}} || 1/512 | | 17=2<sup>4</sup>+''1'' || 4 || 5 || {{nowrap|<code>00 1 01 ''0001''</code>}} || 1/512 | ||
|} | |} | ||
इलियास डेल्टा-कोडित पूर्णांक को डीकोड करने के लिए: | |||
#जब तक आप पूर्व शून्य तक नहीं पहुंच जाते, तब तक स्ट्रीम से शून्य पढ़ें और गिनें। शून्य की इस गिनती को L कहा जाता है। | #जब तक आप पूर्व शून्य तक नहीं पहुंच जाते, तब तक स्ट्रीम से शून्य पढ़ें और गिनें। शून्य की इस गिनती को L कहा जाता है। | ||
#2<sup>L</sup> के मान के साथ, जो पूर्णांक का प्रथम अंक था, उसे ध्यान में रखते हुए, पूर्णांक के शेष L अंक पढ़ें। इस पूर्णांक को N+1 कहें और N प्राप्त करने के लिए एक घटाएँ। | #2<sup>L</sup> के मान के साथ, जो पूर्णांक का प्रथम अंक था, उसे ध्यान में रखते हुए, पूर्णांक के शेष L अंक पढ़ें। इस पूर्णांक को N+1 कहें और N प्राप्त करने के लिए एक घटाएँ। | ||
Line 77: | Line 77: | ||
5. एन्कोडेड संख्या = 2<sup>4</sup>+3=19 | 5. एन्कोडेड संख्या = 2<sup>4</sup>+3=19 | ||
इस कोड को | इस कोड को इलियास गामा कोडिंग में वर्णित विधियों से शून्य या ऋणात्मक पूर्णांकों में सामान्यीकृत किया जा सकता है। | ||
== उदाहरण कोड == | == उदाहरण कोड == | ||
Line 142: | Line 142: | ||
== सामान्यीकरण == | == सामान्यीकरण == | ||
{{See also|परिवर्तनीय-लंबाई मात्रा#ज़िगज़ैग एन्कोडिंग}} | {{See also|परिवर्तनीय-लंबाई मात्रा#ज़िगज़ैग एन्कोडिंग}} | ||
इलियास डेल्टा कोडिंग शून्य या ऋणात्मक पूर्णांक को कोड नहीं करती है। सभी अऋणात्मक पूर्णांकों को कोड करने की विधि कोडिंग से पहले 1 जोड़ना और फिर डिकोडिंग के पश्चात 1 घटाना है। सभी पूर्णांकों को कोड करने की विधि यह है कि सभी पूर्णांकों (0, 1, −1, 2, −2, 3, −3, ...) को कठोरता से धनात्मक पूर्णांकों (1, 2, 3,) में मैप करके आक्षेप स्थापित किया जाए। कोडिंग से पूर्व 4, 5, 6, 7, ...) यह आक्षेप प्रोटोकॉल बफ़र्स से "ज़िगज़ैग" एन्कोडिंग का उपयोग करके किया जा सकता है ([[ज़िगज़ैग कोड]] के साथ भ्रमित न हों, न ही जेपीईजी ज़िग-ज़ैग एन्ट्रॉपी कोडिंग)। | |||
== यह भी देखें == | == यह भी देखें == | ||
* | * इलियास गामा (γ) कोडिंग | ||
* | * इलियास ओमेगा (ω) कोडिंग | ||
* [[गोलोम्ब-चावल कोड|गोलोम्ब-राइस कोड]] | * [[गोलोम्ब-चावल कोड|गोलोम्ब-राइस कोड]] | ||
Line 156: | Line 156: | ||
== अग्रिम पठन == | == अग्रिम पठन == | ||
* {{cite journal |title=URR: Universal representation of real numbers |author-first=Hozumi |author-last=Hamada |journal=New Generation Computing |issn=0288-3635 |date=June 1983 |volume=1 |issue=2 |pages=205–209 |doi=10.1007/BF03037427 |s2cid=12806462 |url=https://www.researchgate.net/publication/220619145_URR_Universal_Representation_of_Real_Numbers<!-- https://link.springer.com/article/10.1007/BF03037427 --><!-- https://www.semanticscholar.org/paper/URR%3A-Universal-representation-of-real-numbers-Hamada/ae987cfad0b240d49245995421d0ec147ac72ae1 --> |access-date=2018-07-09}} (NB. The Elias δ code coincides with Hamada's URR representation.) | * {{cite journal |title=URR: Universal representation of real numbers |author-first=Hozumi |author-last=Hamada |journal=New Generation Computing |issn=0288-3635 |date=June 1983 |volume=1 |issue=2 |pages=205–209 |doi=10.1007/BF03037427 |s2cid=12806462 |url=https://www.researchgate.net/publication/220619145_URR_Universal_Representation_of_Real_Numbers<!-- https://link.springer.com/article/10.1007/BF03037427 --><!-- https://www.semanticscholar.org/paper/URR%3A-Universal-representation-of-real-numbers-Hamada/ae987cfad0b240d49245995421d0ec147ac72ae1 --> |access-date=2018-07-09}} (NB. The Elias δ code coincides with Hamada's URR representation.) | ||
[[Category: एन्ट्रॉपी कोडिंग]] [[Category: अंक प्रणाली]] | [[Category: एन्ट्रॉपी कोडिंग]] [[Category: अंक प्रणाली]] | ||
Revision as of 16:45, 13 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 कहा जाता है।
- 2L के मान के साथ, जो पूर्णांक का प्रथम अंक था, उसे ध्यान में रखते हुए, पूर्णांक के शेष L अंक पढ़ें। इस पूर्णांक को N+1 कहें और N प्राप्त करने के लिए एक घटाएँ।
- हमारे अंतिम आउटपुट के पहले स्थान पर जो मान 2N दर्शाता है।
- निम्नलिखित N अंकों को पढ़ें और जोड़ें।
उदाहरण:
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, ...) यह आक्षेप प्रोटोकॉल बफ़र्स से "ज़िगज़ैग" एन्कोडिंग का उपयोग करके किया जा सकता है (ज़िगज़ैग कोड के साथ भ्रमित न हों, न ही जेपीईजी ज़िग-ज़ैग एन्ट्रॉपी कोडिंग)।
यह भी देखें
- इलियास गामा (γ) कोडिंग
- इलियास ओमेगा (ω) कोडिंग
- गोलोम्ब-राइस कोड
संदर्भ
- ↑ 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.)