以利亚戴尔达码

✍ dations ◷ 2025-09-19 02:16:34 #数字,无损压缩算法

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

相关

  • 雕像塑像是采用写实或抽象形式的立体艺术品,如人物、动物等的立体像。塑像用石头或木头雕刻,或用塑料材料通过模具制作,或用青铜铸造,或采用类似方法制作。
  • 白松露白松露菌(学名:Tuber magnatum),野生真菌类,松露的一种。松露是一种地下子囊菌门菌类的子实体,是许多西洋松露属种的主要属种之一。松露是菌根真菌,因此通常与树木的根部紧密联系的
  • 法务局法务局(葡文:Direcção dos Serviços de Assuntos de Justiça;葡文简称:DSAJ)是澳门特别行政区的行政部门,为行政法务司辖下部门。前身为司法事务司,该司司长最后一任为张永春。
  • 无腔动物无腔动物亚门(学名:Acoelomorpha)是异无腔动物门下的一个亚门。它们拥有浮浪幼虫样动物的特征,以往被认为是属于后口动物,但有学者将它们成立为一个独立于后口动物的门。经过miRN
  • 1960年冬季世界大学生运动会第一届冬季世界大学生运动会于1960年2月28日至3月6日在法国霞慕尼举行。这是霞慕尼继1924年冬季奥林匹克运动会后,举办的又一项国际冬季综合体育赛事。 *  主办国家/地区(
  • 伺服机构伺服机构(servomechanism)系指经由闭回路控制方式达到一个机械系统位置、速度、或加速度控制的系统。伺服机构理论()起源于二次世界大战期间,美军为了发展具有自动控制功能的雷达
  • 高乐三髙乐三(1900年-1987年),原名广育,字乐三,以字行。号罗珊、乐翁、滈滨居士、神禾老农。陕西长安人。中国著名书法家,章草大师。以章草、颜楷见长,堪称陕西近现代章草第一大家,有着“三
  • 美国国家安全委员会NSC-68号文件美国国家安全目标和计划书 ,或以NSC-68号文件更广为人知,是一份长达66页的美国国家安全委员会(NSC)秘密政策文件。该文件由国务院和国防部起草,并于1950年4月7日提交给时任美国总
  • 图尔古特·厄扎尔图尔古特·厄扎尔(Turgut Özal,1927年10月13日-1993年4月17日),土耳其政治领袖,曾任土耳其总理及总统。厄扎尔生于马拉蒂亚省,大学毕业后曾经在美国攻读工程。他长期在政府机关工
  • 孙元一孙元一(韩语:손원일,1909年5月5日-1980年2月15日),是大韩民国海军首任参谋总长(朝鲜语:대한민국의 해군참모총장),被认为是韩国海军奠基者。退役后,历任第五任国防部长,首任驻西德大使。