gpt4 book ai didi

algorithm - 将字节转换为包含 Scala 中每个单独位的 bool 数组的最快方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:39:20 25 4
gpt4 key购买 nike

在 Scala 中实现霍夫曼算法并将结果写入文件后,我现在正在构建解码器。为此,我需要将从文件中读取的 List[Char] 转换为包含每个单独位的 List[Boolean]。由于它是一个大文件,我需要以最快的方式执行此操作。

我目前有以下算法:

def uncompress(fileString : String, fileChars : List[Char]) : String = {
var bools:List[Boolean] = List[Boolean]()
fileChars.foreach(f => bools = bools ++ byte2Bools(f))
}

def byte2Bools(b: Char): Seq[Boolean] =
0 to 7 map isBitSet(b)

def isBitSet(byte: Char)(bit: Int): Boolean =
((byte >> bit) & 1) == 1

然而,在一个 600KB 的文件上完成这个算法需要 30 多分钟!另外,我不确定我在创建这个算法时是否犯了一些错误。

我如何改进它以获得更好的性能?

最佳答案

fileChars.flatMap(byte2Bools)

会更快地将 List[Char] 转换为 List[Boolean]

但是将 List 与原始类型一起使用已经意味着您有很大的内存开销,对于 Boolean 更是如此。我会使用 String 作为字符,使用 Array[Boolean]BitSet 作为位(因为您事先知道长度) .当然,这会使代码变得更复杂......

关于algorithm - 将字节转换为包含 Scala 中每个单独位的 bool 数组的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47056102/

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