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
1条答案
按热度按时间j5fpnvbx1#
cum_freq
在model.h
中定义为具有258个元素。对于80年代的单字节字符编码来说足够了。在数组定义中滥用'+1'的可怕用法。1.点似乎找到数组中与条件不匹配的第一个索引。旧的C程序不能很好地传达意图。