以利亚戴尔达码

✍ dations ◷ 2025-06-21 12:59:29 #数字,无损压缩算法

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

相关

  • 青光眼青光眼(拉丁语:Glaucoma)是一系列会导致视神经受损,进而造成视力丧失的眼疾。其中最常见的是隅角开放性青光眼,隅角闭锁性青光眼次之,但亚裔族群有罹患此型的机会较欧裔高。也有部
  • 大海牛大海牛(学名:Hydrodamalis gigas),又名巨儒艮、无齿海牛或斯特拉海牛,是已灭绝的巨大哺乳类动物。它们是海牛目中已知体型最大的物种,比起其近亲海牛与儒艮都要来得大,而它们也是生
  • 中央区中央区(希伯来语:מחוז המרכז‎)是以色列六个行政区之一,首府拉姆拉。面积1,276km²;人口约161万(2005年),其中犹太人占88%、阿拉伯人占8%。
  • 内部者们《局内者们》(韩语:내부자들;英语:Inside Men),又译局内者们或局内人们,是2015年11月上映的一部韩国政治犯罪电影,由禹民镐(朝鲜语:우민호)执导,李炳宪、曹承佑和白润植主演。本片以不同
  • 云台云台(英语:tripod head),是指光学设备底部和固定支架连接的转向轴。许多高档的照相机三脚架并不提供配套的云台,用户需要自行配备。照相机用的云台可以分为分别调节前后、左右两
  • 赵有亮赵有亮(1944年-),汉族,中华人民共和国影视、话剧演员,国家话剧院原院长,中国共产党党员,第十一届全国政协委员。2008年,当选第十一届全国政协委员,代表文化艺术界,分入第二十六组。
  • 奥古斯特·斯特林堡奥古斯特·斯特林堡(瑞典语:August Strindberg,1849年1月22日-1912年5月14日)是一位瑞典作家、剧作家和画家,被称为现代戏剧创始人之一。斯特林堡是一位多产的作家,在其四十余年的
  • 薙刀社青春日记《薙刀社青春日记》(日语:あさひなぐ)是小崎亚衣所著的日本校园漫画作品,以日本传统武道女子薙刀为题材,讲述高中生东岛旭加入薙刀社的故事。漫画在《Big Comic Spirits》2011年8
  • 追凶者也《追凶者也》(英语:Cock and Bull),是曹保平执导的一部中国剧情片,张天辉、阳建军和曹保平联合编剧,刘烨、张译、王子文、段博文、谭卓、颜北主演。2016年9月14日在中国上映。刘烨
  • 鲁楷鲁楷(?-?),号柏斋。中国清朝官员,本籍中国浙江。1765年(乾隆三十年)10月,任泉州府知府。1766年(乾隆31年)接替徐德峻,于台湾担任台湾府海防补盗同知。品等为正五品的该官职隶属于台湾府,主