【发布时间】:2017-11-01 21:50:59
【问题描述】:
我刚刚使用 Scala 实现了 Huffman 代码。但是,我的一项功能在大文件上效果不佳。是解码函数,我用了太多递归:
def decode(tree: BinarySearchTree, bits: List[Boolean]): List[Char] = {
def searchCharactersInBinarySearchTree(t: BinarySearchTree, b: List[Boolean]): List[Char] = t match {
case LeafNode(ch, _) => if (b.isEmpty) List(ch) else ch :: searchCharactersInBinarySearchTree(tree, b)
case ForkNode(l, r, _, _) => if (b.head == false) searchCharactersInBinarySearchTree(l, b.tail) else searchCharactersInBinarySearchTree(r, b.tail)
}
searchCharactersInBinarySearchTree(tree, bits)
}
当我有一个很小的位列表时很好,但是当我的位列表很大(超过 10000 个项目)时,它会给出 StackOverflow 错误。我只是找不到可以使用较少递归来优化它的地方。我知道问题出在叶子中的递归调用(而不是叉子)。
如何删除此递归调用但仍保持功能正常工作?
【问题讨论】:
标签: scala huffman-code