以利亚戴尔达码

✍ dations ◷ 2025-02-24 13:28:41 #数字,无损压缩算法

以利亚戴尔达码(Elias delta code)是一种用于正整数之通用编码。该码由 Peter Elias 发明。

对于待编码正整数 ≥1:

另一个等价的编码方式为:

要对 x {\displaystyle x} 进行编码,以利亚戴尔达码必须使用 log 2 ( x ) + 2 log 2 ( log 2 ( x ) + 1 ) + 1 {\displaystyle \lfloor \log _{2}(x)\rfloor +2\lfloor \log _{2}(\lfloor \log _{2}(x)\rfloor +1)\rfloor +1} 个比特。

以下为一编码对照表:

以利亚戴尔达码之解码遵循下列步骤:

举例:

0010100111. 最左方有兩個零位元 0012. 再讀取兩個位元 001013. 還原 00101 = 54. 再讀取 N = 5 − 1 = 4 個位元 0011 = 35. 解碼為 = 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;        for (int temp = num; temp > 0; temp >>= 1)  // calculate 1+floor(log2(num))            len++;        for (int temp = len; temp > 1; temp >>= 1)  // calculate floor(log2(len))            lengthOfLen++;        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();}

一般化

以利亚戴尔达码并不适用于零或负整数。一个一般化的方式是在最左侧先加一个一比特,解码时再行扣掉。另一个方法是在编码前将所有整数映射至正整数,例如:(0, 1, −1, 2, −2, 3, −3, ...) 对应至 (1, 2, 3, 4, 5, 6, 7, ...)。

相关

  • 阎魔罗王阎罗王(梵语:यमराज,IAST:Yamaraja),源自印度教神祇阎魔罗阇(或译阎摩、阎魔、阎魔大王),是地狱的主宰,随着佛教传入中国,华人尊称其为阎魔罗阇大王,简称阎罗王、阎王、阎君。罗阇即
  • 孙一致孙一致(1619年-1693年),字惟一,号业澜,亦号箨庵,江南盐城大孙庄人,清初政治人物。生于明万历四十七年(1619年)八月。早年受叔父孙榘的教导,自小能读四书五经。顺治十一年(1656年)考取江南
  • 汉坦病毒属汉坦病毒(Hantavirus),又译汉坦病毒或汉滩江病毒,是本雅病毒目的一种病毒,其引发的病症称为汉他病/肾综合征出血热/流行性出血热,为一种经由老鼠传染给人类的致命传染病,被列为生物
  • 金字碑金字碑,位于新北市瑞芳区三貂岭古道内,为清台湾镇总兵刘明灯于穆宗同治六年(1867年)冬所题。于1985年8月19日公告为国家三级古迹,现为新北市市定古迹。因年代已久,碑文的字迹已有
  • 国家旅游局1999年规定:印章直径4.5厘米,中央刊国徽,由国务院制发。中华人民共和国国家旅游局(官方英语译名:China National Tourism Administration,缩写作CNTA),是已撤销的中华人民共和国国务
  • 萨福萨福(古希腊文:Σαπφώ;拉丁化:Sappho,约前630年代-前570年代),古希腊的女同性恋诗人,一生写过不少情诗、婚歌、颂神诗、铭辞等。著有诗集九卷,大部分已散轶,现仅存一首完篇、三首几
  • 形状记忆聚合物形状记忆聚合物(Shape Memory Polymer,简称SMP),又称为形状记忆高分子,是一种聚合物的智能材料,是具有初始形状的制品,在一定的条件下改变其初始条件并固定后,通过外界条件(如热、 电
  • 欧峰坐标:46°12′01″N 6°50′28″E / 46.20028°N 6.84111°E / 46.20028; 6.84111欧峰(Pointe de l'Au),是瑞士的山峰,位于该国西南部,由瓦莱州负责管辖,属于沙布来山区的一部分,距
  • 掖邪狗掖邪狗,为古代日本邪马台国女王卑弥呼派遣至三国曹魏之大夫。魏正始四年(243年),卑弥呼派遣使大夫伊声耆、掖邪狗等八人,向曹魏上贡生口、倭锦、绛青缣、绵衣、帛布、丹木、犬付
  • 毕济时毕济时(?-?),字汝霖,江西广信府贵溪县人,军籍,明朝政治人物。江西乡试第六十六名举人。正德六年(1511年)中式辛未科进士。授工部郎中。曾祖毕德兴;祖父毕渊,曾任国子生赠工部主事;父毕瑜,曾