关于C#中自定义Deflate实现的问题

时间:2011-07-20 09:54:07

标签: c# algorithm

我目前正在研究一种自定义deflate算法,该算法应封装在来自 System.IO.Stream 的自定义类中。

我知道 DeflateStream 的.Net实现,但我也想完全理解算法需要实现它因为Silverlight我是什么我正在使用的不包括那个类。

我已经阅读了一些有关deflate的信息,并且了解deflate是 LZ77 Huffman-Encoding 的组合,并且已经花了一些时间用于 LZ77 实现,但现在确实有一些问题:

1)LZ77的输出是三元组列表(偏移,长度,后继)。将它们映射为三个字节效率不高,不是吗?你会建议什么?我将所有输出写入底层的 MemoryStream ,它只能处理(一组)字节。

2)您建议使用什么尺寸的滑动窗口?

3)我确实知道霍夫曼编码是什么,但我如何在这里应用呢?我的问题是,我不知道我需要用它来映射“块”的大小,并且没有找到任何关于此的信息。我是否为每个字节应用它?两个字节?三?我如何处理结果输出(与1中提到的相同的问题))?我想过使用一种继续读取字节并提取霍夫曼代码的状态机,但这似乎不是很有效。还有更好的方法吗?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

无法告诉您前两个点,但霍夫曼编码基本上是为序列中的每个符号生成二进制代码。代码长度取决于符号的频率。较短的代码适用于人群,而较长的代码适用于不受欢迎的人。这个想法就像:

abaaaaaaaaaabaaaaaaaabaaaaaaaaaaaaaa

  1. 使用1表示“a”
  2. 使用01代表'b'