如何在没有前缀属性的情况下解码霍夫曼编码

时间:2019-11-03 08:44:18

标签: huffman-code fax

我正在尝试解码用Modified Huffman Coding编码的缓冲区。

这是缓冲区的开头:namespace Program001 { public partial class Form3 : Form { public Form3() { InitializeComponent(); comboBox1.Items.Add("E"); comboBox1.Items.Add("W"); } private void textBox2_TextChanged(object sender, EventArgs e) { if (comboBox1.SelectedItem == "E") { int hr = int.Parse(textBox1.Text); int Zd = int.Parse(textBox3.Text); int output = hr - Zd; if (output <= 0) { int Q = output + 24; textBox2.Text = Q.ToString(); } else { textBox2.Text = output.ToString(); } } if (comboBox1.SelectedItem == "W") { int hr = int.Parse(textBox1.Text); int Zd = int.Parse(textBox3.Text); int output = hr + Zd; if (output >= 24) { int Q = output - 24; textBox2.Text = Q.ToString(); } else { textBox2.Text = output.ToString(); } } } } }

translation table看,似乎无法保证Modified Huffman所需的prefix属性。根据该表,我看到000111100001111011111010001000011101000011101000011110表示00011,但是7B表示000111。在这种情况下,如何解码上面的缓冲区?我读错了桌子还是我缺少的算法有些细微差别?

2 个答案:

答案 0 :(得分:2)

改进的霍夫曼编码使用白色和黑色像素的交替编码。编码始终以白色像素开始。因此,在您的示例中,缓冲区解码为000111=1W10=3B000111=1W,依此类推。

答案 1 :(得分:1)

经过修改的霍夫曼编码假定您从白色像素开始,如链接中的转换表所述。如果没有,则使用运行“ 0”白色像素的代码。

00110101 = 0W
000111   = 1W
and so on...

在您的示例中,您从1W 000111开始,然后从3B 10开始,依此类推...

正如约翰指出的那样,您的翻译表是错误的。 正确的表格可以在这里找到:Correct Modified Huffman Coding Translation Table