以利亚戴尔达码

✍ dations ◷ 2025-07-06 02:11:33 #数字,无损压缩算法

以利亚戴尔达码(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, ...)。

相关

  • 阴茎人类阴茎是男性人类交配和排尿的器官。人的阴茎由三个主要部分组成:根部、体部,以及用以覆盖龟头的上皮部分(包括阴茎体部两侧的皮肤和包皮)。阴茎的主体主要由两个位于背侧的阴
  • 磷酸果糖激酶1结构 / ECOD磷酸果糖激酶1(Phosphofructokinase-1;PFK-1;EC 2.7.1.11)是一种糖解作用里一种重要的酶,是一种由4个次单位组成的异位(allosteric)酵素,可受多种活化剂与抑制剂调控。在
  • 里卡多·穆蒂里卡多·穆蒂(意大利语:Riccardo Muti,1941年7月28日-),意大利指挥家。穆蒂出生于意大利那不勒斯,首先于家乡学习钢琴,嗣后前往米兰音乐学院随布鲁诺·贝蒂内利(英语:Bruno Bettinelli
  • 麻省总医院麻省总医院(英文:Massachusetts General Hospital;缩写:Mass General或MGH)为一所坐落于波士顿的综合型医院。其为美国新英格兰地区最古老且最具规模的医院,并是哈佛大学最大型的
  • 斑胸草雀斑胸草雀又称珍珠鸟,属于雀形目梅花雀科,分布于澳洲全境,除了约克角半岛、南部沿海地区、塔斯马尼亚岛。 身长10-11cm,主要以禾本科植物的种子为食。 斑胸草雀与其他梅花雀科鸟
  • 博伊科·鲍里索夫博伊科·梅托迪耶夫·鲍里索夫(保加利亚语:Бойко Методиев Борисов;1959年6月13日-),保加利亚政治人物,2009年—2013年、2014年-2017年、2017年至今任总理。此
  • R-9导弹二级液态燃料(煤油+液氧)R-9(北约代号:SS-8)是一种苏联的二级洲际弹道导弹。R-9设计于1959年,首次试验于1961年。相较于苏联以前的导弹设计有相当的进步。R-9可提供1600公斤
  • 大写大写可能指以下的几种意思:
  • 利奥波德·塞达尔·桑戈尔利奥波德·塞达尔·桑戈尔(Léopold Sédar Senghor,1906年10月9日-2001年12月20日),塞内加尔诗人、政治家、文化理论家,1960年至1980年任塞内加尔首任总统,被广泛认为是20世纪最重
  • 代悦代悦(1987年7月19日-),汉族,中国大陆歌手、演员,毕业于四川音乐学院。2010年参加青海卫视举办的全国歌唱比赛节目《花儿朵朵》获得全国第五名,由其独特的沙哑的嗓音、中性风气质虏