我试图找到在Huffman编码上生成的代码长度,以找到Huffman压缩效率:
我的霍夫曼编码代码是:
函数调用是GenerateCode(rear, "",Obj);
这些Obj用于内部目的(您可能觉得它不是必需的,但我使用它来获取当前上下文中的数据)。
public void GenerateCode(Node parentNode, string code, MainPage obj)
{
obj.listBox2.Visibility = Visibility.Visible;
if (parentNode != null)
{
GenerateCode(parentNode.left, code + "0",obj);
if (parentNode.left == null && parentNode.right == null)
obj.listBox2.Items.Add("Symbol :" + parentNode.symbol + " - " + "Code : " + code);
GenerateCode(parentNode.right, code + "1",obj);
}
}
假设获得的霍夫曼表是这样的:
symbol : 0 Code : 1
symbol : 1 Code : 00
symbol : 2 Code : 011
symbol : 3 Code : 010
现在我无法在c#中找到逻辑来计算这些编码对应于每个符号的长度,这样我就可以将它们与频率相乘来计算霍夫曼压缩效率。因为它们是" 0和1"那么如何计算它们的长度?
答案 0 :(得分:1)
长度为code.Length
,字节长度为(float)code.Length / 8
。重要的是以相同的单位,位或字节与原始长度进行比较。