算术编码算法C/Java,累积频率

z9ju0rcb  于 2023-04-28  发布在  Java
关注(0)|答案(1)|浏览(108)

C相关问题主题“算术编码算法”。我目前正在用Java实现算术编码算法,有几行代码对我来说没有意义。
1.如果我们有一个字母表,它的字符数少于无符号字节所能容纳的字符数,e。g,47个唯一字符,如何索引累积频率(根据此表达式):
high = low + (range * cum_freq[symbol-1]) / cum_freq[0] - 1;
例如,符号“U”的ASCII码值为85,但cum_freq[84]不存在。
1.在算术解码算法中,第189行的for循环的意义是什么?它只是简单地将symbol递增1吗?
for (symbol = 1; cum_freq[symbol]>cum; symbol++);
资料来源:数据压缩的算术编码,ACM通讯,1987 https://web.stanford.edu/class/ee398a/handouts/papers/WittenACM87ArithmCoding.pdf

j5fpnvbx

j5fpnvbx1#

  1. cum_freqmodel.h中定义为具有258个元素。对于80年代的单字节字符编码来说足够了。在数组定义中滥用'+1'的可怕用法。
#define No-of-chars 256 
#define No-of-symbols (No-of-chars+1)
...
int cum_freq[No_of_symbols+1];

1.点似乎找到数组中与条件不匹配的第一个索引。旧的C程序不能很好地传达意图。

相关问题