gpt4 book ai didi

java - 有没有办法优化此代码以避免内存不足错误?

转载 作者:行者123 更新时间:2023-12-01 14:40:33 26 4
gpt4 key购买 nike

我的整个项目是创建一棵树并使用霍夫曼编码对给定文件进行编码和解码。我现在需要解码我的文件。为此,我必须遍历霍夫曼树,直到到达最底部的叶子,然后返回该叶子代表的字节。我根据提供给该方法的位字符串遍历树。 AKA 如果当前位为 1,我会转到树中的 childOne 等等。问题是我不断收到 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 中它结束的位置,以及将指定的 Byte 放入数组中,这就是为什么我在方法中将 Byte 放入数组中并返回 int。基本上,有没有更好的方法来完成这项工作?

最佳答案

是的,有。将递归更改为迭代..

temp = root;
childOne = temp.getChildOne();
childZero = temp.getChildZero();
while(childOne != null && childZero != null) {
currentBit = bitArray.get(startPosition++);
if (currentBit == 1) {
temp = childOne;
} else {
temp = childZero;
}
childOne = temp.getChildOne();
childZero = temp.getChildZero();
}

关于java - 有没有办法优化此代码以避免内存不足错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16002094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com