Scala-huffman解码

Scala-huffman解码,scala,decoding,huffman-code,Scala,Decoding,Huffman Code,我正在学习scala coursera课程,并试图为哈夫曼算法的“解码”方法编写一个实现。我是斯卡拉的新手 以下是我的代码(到目前为止) 编写测试时,例如以下内容: val decoded = decode(t1, List(0, 1)) assert(decoded === List('a','b'))// decoded is returned as List('a') instead of List('a','b') 给出t1as:Fork(叶('a',2),叶('b',3),

我正在学习scala coursera课程,并试图为哈夫曼算法的“解码”方法编写一个实现。我是斯卡拉的新手

以下是我的代码(到目前为止)

编写测试时,例如以下内容:

  val decoded = decode(t1, List(0, 1))
  assert(decoded === List('a','b'))//  decoded is returned as List('a') instead of List('a','b')
给出
t1
as:
Fork(叶('a',2),叶('b',3),列表('a','b'),5)
有人能告诉我为什么实现只返回
List('a')
我假设
aabbb
的编码为:

a -> 0
b -> 1

在哈夫曼解码中,每次分叉、向右或向左时,你都会得到一位
子位。在您的实现中,您可以在分叉和到达
叶时执行此操作。每次你收到一封信,你就多扔掉一点

在您的案例中,您可以通过几项测试看出:

decode(List(0,1)) === List(a)
decode(List(0,0,1)) === List(a,b)
decode(List(0,0,0)) === List(a,a)
decode(List(0,1,0)) === List(a,a)

或者,您可以使用调试器,一步一步地执行代码。

在哈夫曼解码中,每次分叉、向右或向左移动时,您都会获得一位
子位。在您的实现中,您可以在分叉和到达
叶时执行此操作。每次你收到一封信,你就多扔掉一点

在您的案例中,您可以通过几项测试看出:

decode(List(0,1)) === List(a)
decode(List(0,0,1)) === List(a,b)
decode(List(0,0,0)) === List(a,a)
decode(List(0,1,0)) === List(a,a)

或者您可以使用调试器,一步一步地执行代码。

谢谢您的回答。是的,这就是问题所在。我真的不该在摸树叶的时候用钻头。另外,当到达最后一个角色时,头枕有一个小问题,头枕落在“零”部分,因此忽略了箱子。必须对最后一个元素的“Case Fork”部分进行额外检查。部分原因是我对模式匹配如何与链表一起工作的误解。谢谢你的回答。是的,这就是问题所在。我真的不该在摸树叶的时候用钻头。另外,当到达最后一个角色时,头枕有一个小问题,头枕落在“零”部分,因此忽略了箱子。必须对最后一个元素的“Case Fork”部分进行额外检查。部分原因是我对模式匹配如何处理链表的误解。