算术编码,有没有简单的方法可以利用单词中剩余的容量?

问题描述 投票:0回答:1

给定英语中的 26 个字母,我可以用 5 位对一个字母进行编码,其中使用 0 到 25 之间的值,而浪费 26 到 31 的值。

编码为基数 26 时速度稍慢,但稍好一些。

每个字母 5 位,12 个字母适合 64 位单词。 使用基数 26,13 个字母适合一个 64 位单词,但仍然存在一些浪费容量。

26^13 = 2.48115e+18 2^64 = 1.844e+19

是否有任何合理紧凑的方法来使用额外的一两个位,而不是将其浪费在每个 64 位数字中打包 13.5 个字?我想不出一个简单的方法,如果需要大量代码,或者花费更长的时间,我不确定它是否值得,但我很好奇是否有一个优雅的解决方案。

algorithm compression bit-manipulation
1个回答
0
投票

好吧,您在标题中给出了自己问题的答案 - 您可以使用算术编码并任意接近 log2(26) 位/字符。

不过,我认为这有点复杂,而且最后会浪费一些时间。这可能不合理。

我认为你可能应该坚持你的 base-26 想法,但不要将尽可能多的字符编码为 64 位,而是将 7 个字符编码为 33 位。

7 个字符使用 log2(26)*7 = 32.903 位,因此每个 33 位字将浪费不到 0.1 位。

© www.soinside.com 2019 - 2024. All rights reserved.