以利亚戴尔达码

✍ dations ◷ 2025-11-02 11:58:21 #数字,无损压缩算法

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

相关

  • 少尿症寡尿(英文:Oliguria),指排尿的量比正常人少。寡尿的定义因年龄差异而有所不同。寡尿通常是异常肾功能的最早征兆。
  • 古希腊语语法 (表格)本文只包括变格和动词变位的表格。详细的解释请参见古希腊语语法。变位表格没有包扩双数。下面表格不包括将来完成时。规则动词 τιμάω → τιμῶ (词干 τιμα-
  • 加拿大历史博物馆加拿大历史博物馆(英语:Canadian Museum of History/法语:Musée canadien de l'histoire)是加拿大国家人类历史博物馆,是加拿大最受欢迎和访问最多的博物馆之一。它坐落在魁北克
  • 京仁京仁高速公路(朝鲜语:경인고속도로/京仁高速道路 Gyeongin gosokdoro */?),是连接韩国仁川广域市西区及首都首尔特别市阳川区的一条高速公路,长13.4公里。
  • 圆山街道园山街道中华人民共和国广东省深圳市龙岗区下辖的一个街道办事处,下辖西坑、安良、大康等共6个社区。该街道产业以未来产业、机械制造、休闲旅游和现代服务业为主,规划了占地1
  • 宜黄县宜黄县是中国江西省抚州市所辖的一个县。总面积为1944平方公里,2003年人口为21.1万。三国吴太平二年(公元257),析临汝建宜黄县。属临川郡。隋开皇九年(公元589),宜黄并入崇仁县。唐
  • AmarisAmaris(摩芮思)是一家国际化的科技技术管理咨询公司,总部在瑞士日内瓦,2017年员工人数达到3650人,在全球50个国家有65家分公司。摩芮思为IT行业在以下5个方面提供战略和外包服
  • 藤森昭一藤森昭一(日语:藤森 昭一/ふじもり しょういち ,1926年12月26日-2016年6月25日),日本官僚。曾担任日本赤十字社名誉社长。环境事务次官、内阁官房副长官、宫内厅长官、日本赤十字
  • 伊朗百科全书伊朗百科全书是一部以伊朗为主题的英文百科全书,内容涉及中东、印度次大陆、高加索、中亚、欧洲和伊朗及波斯文化相关的主题。由额桑·雅沙特尔创办于1985年,共45卷,截至2016年
  • 九宫图九宫图,即三阶幻方,又称九宫算或洛书。1977年中国考古学家在安徽阜阳县双古堆西汉古墓中发现汉文帝七年(前173年)的太乙九宫占盘,乃是中国汉代幻方的实物。东汉《数术记遗》也有