以利亚戴尔达码

✍ dations ◷ 2025-10-22 07:45:11 #数字,无损压缩算法

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

相关

  • 米高梅公司米高梅公司(英语:Metro-Goldwyn-Mayer, Inc.,MGM),是一间美国的媒体公司,在1922年创办,于1981年与联美公司(United Artists)合并,主要包括制作和发行影片和电视节目。截至2019年,米高梅
  • 黎国如黎国如(1955年8月-),安徽六安人,中华人民共和国政治人物,中国人民解放军少将,中国人民解放军总政治部宣传部原副部长,中国文学艺术界联合会原副主席。
  • 东海岸内陆地区西海岸铁路线东海岸线(英语:East Coast Line,也称金马士-道北铁路即金道铁路)是一条由马来亚铁道营运的铁路干线,这条铁路起自与西海岸铁路线接轨东金马士,途经吉兰丹、彭亨、森美
  • 锁国 (日本)锁国是日本江户时代施行的外交政策,于1633年颁布第一次锁国令开始,直到1854年美国海军军官培里率舰叩关为止。当初实行该政策时亦称呼为“海禁”,锁国这名字是由兰学者志筑忠雄
  • NHK高知放送局NHK高知放送局,是日本放送协会位于高知县高知市的地方放送局,也是负责主管当地事务的放送局。
  • 斯尔詹·巴比奇斯尔詹·巴比奇(塞尔维亚语:Srđan Babić;1996年4月22日-)是一位塞尔维亚足球运动员。在场上的位置是中后卫。他现在效力于塞尔维亚足球超级联赛球队伏伊伏丁那足球俱乐部。他也
  • 光原爱神螺光原爱神螺(学名:)为爱神螺科原爱神螺属的动物。在中国大陆,分布于西沙群岛等地。该物种的模式产地在西沙群岛的琛航岛。
  • 圭多·德马科圭多·德马科(Guido de Marco,1931年7月22日-2010年8月12日)马耳他政治家,他曾担任第六任马耳他总统(1999年-2004年)。一位著名的政治家和立法者,德马科还担任过副总理、内政、司法
  • 立陶宛神话立陶宛神话(同时也为立陶宛地方宗教),指过去在立陶宛地区所信奉的一种多神教。与印度神话、苏美尔神话等相似,立陶宛神话有许多地方都与印欧神话的共性一致。立陶宛神话并没有第
  • 鲁里埃尔·鲁比尼鲁里埃尔·鲁比尼(英语:Nouriel Roubini,1959年3月29日-),美国凯因斯派经济学家及纽约大学的教授,专栏作家,因为对经济持悲观论,人称“末日博士”。他出生于土耳其的犹太家庭,2岁时全