Java源代码生成中的哈夫曼码译码器
我想用Java创建一个快速的哈夫曼代码解码器,因此考虑查找表。由于这些表占用内存,并且我们使用Java代码来导航和访问这些表,因此可以轻松(或不)编写一个表示相同表的程序/方法 这种方法的问题是,我不知道什么是最好的策略。我知道这与缓存和分支预测中的内容有很大关系。此外,开关盒实现意味着实际的ASM超出了我的能力范围。如果我有一个内存中的查找表(或它的层次结构),我将能够简单地跳入和跳出,但出于我的目的,我怀疑该表将适合缓存 因为我实际上遍历一棵树,所以可以像else语句需要一定数量的比较语句那样实现它,但是对于每个比较语句,它都需要额外的二进制操作 因此,存在以下选项:Java源代码生成中的哈夫曼码译码器,java,performance,parsing,huffman-code,Java,Performance,Parsing,Huffman Code,我想用Java创建一个快速的哈夫曼代码解码器,因此考虑查找表。由于这些表占用内存,并且我们使用Java代码来导航和访问这些表,因此可以轻松(或不)编写一个表示相同表的程序/方法 这种方法的问题是,我不知道什么是最好的策略。我知道这与缓存和分支预测中的内容有很大关系。此外,开关盒实现意味着实际的ASM超出了我的能力范围。如果我有一个内存中的查找表(或它的层次结构),我将能够简单地跳入和跳出,但出于我的目的,我怀疑该表将适合缓存 因为我实际上遍历一棵树,所以可以像else语句需要一定数量的比较语句那
- 使用内存中查找表的通用算法
- 决策树的If/else表示法
- 使用小的switch语句进行If/else表示,以找到正确的符号组(相同的位模式长度)(If语句越少,代码可能越多)
- Switch语句表示的代码
我将检查1-模式是否能让我有机会以更好的方式存储和访问掩码,允许二进制搜索正确的组,而不是在O(n)中前进,甚至可能在处理过程中避免任何移位操作。我无法理解你在(long)中写的大部分内容问题,但有一个简单的方法 我们将从一个表开始。假设您的最长哈夫曼代码是15位。(事实上,deflate将其哈夫曼代码的大小限制为15位。)然后构建一个包含32768个条目的表,其中每个条目是下一个代码中的位数,以及该代码的符号。对于小于15位的代码,表中有多个条目用于同一代码。例如,如果代码为10010110(7位)对于符号“C”,那么表xxxxxxxx 10010110的所有索引都有相同的内容。这些条目都有{7,'C'} 然后从流中获取15位,并在表中查找下一个代码