我的整个项目是创建一个树并使用霍夫曼编码来对给定文件进行编码和解码。我处于需要解码文件的地步。要做到这一点,我不得不通过我的霍夫曼树,直到我到达最底部的叶子,然后返回该叶子代表的字节。我根据为该方法提供的位串来遍历树。如果当前位是1,我会去树中的childOne,等等。问题是我不断收到outOfMemory
错误。有没有什么办法来优化这段代码,以便它不会占用太多内存?有没有办法优化这段代码,以避免outOfMemory错误?
public static int decode(List<Integer> bitArray, HuffmanNode root, int startingPosition,
ArrayList<Byte> finalArray)
{
HuffmanNode childOne;
HuffmanNode childZero;
int currentBit = bitArray.get(startPosition);
byte newByte;
childOne = root.getChildOne();
childZero = root.getChildZero();
if(childOne == null && childZero == null)
{
finalArray.add(root.getByteRepresented());
return startPosition;
}
else if(currentBit == 1)
{
startPosition++;
startPosition = decode(bitArray,childOne,startPosition,finalArray);
}
else
{
startPosition++;
startPosition = decode(bitArray,childZero,startPosition,finalArray);
}
return startPosition;
}
我需要知道在bitArray的地方,它结束以及把指定字节到一个数组,所以这就是为什么我把字节为阵列的方法中,返回和INT 。基本上,有没有更好的方法来完成这件事?
那好吧。我想这是有道理的。这只是作业作业,建议使用递归算法。 – art3m1sm00n
好的。它不会像算法那么好,但它显然不会在没有改变的情况下工作。谢谢! – art3m1sm00n
@ GabrielleLee递归是一种优雅而简单易懂的方法,但并不总是有效。 – vidit