【发布时间】:2017-10-01 23:38:35
【问题描述】:
我正在学习 scala coursera 课程并尝试为霍夫曼算法的“解码”方法编写一个实现。我是 scala 的新手。
以下是我的代码(到目前为止)。
def decode(tree: CodeTree, bits: List[Bit]): List[Char] = {
def innerDecode(subTree: CodeTree, subBits: List[Bit]): List[Char] =
subBits match {
case head :: rest => {
subTree match {
case Leaf(c, w) => c :: innerDecode(tree, rest)
case Fork(left, right, _, _) => {
if ( head == 0) innerDecode(left, rest)
else innerDecode(right, rest)
}
}
}
case Nil => List[Char]()
}
innerDecode(tree, bits)
}
在编写测试时,例如下面:
val decoded = decode(t1, List(0, 1))
assert(decoded === List('a','b'))// decoded is returned as List('a') instead of List('a','b')
给t1 为:Fork(Leaf('a',2), Leaf('b',3), List('a','b'), 5)
有人可以告诉我为什么执行将只返回List('a')
我假设aabbb 的编码是:
a -> 0
b -> 1
【问题讨论】:
标签: scala decoding huffman-code