1
스칼라 코스 세라 코스를 진행하고 있으며, 허프만 알고리즘의 '디코드'메소드 구현을 작성하려고합니다. 나는 스칼라가 처음이다.스칼라 호프만 디코딩
다음은 현재까지의 코드입니다.
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)
}
예를 들면. 이다 구현 내가 가정 aabbb
만을위한 List('a')
인 코드를 반환 할 이유 Fork(Leaf('a',2), Leaf('b',3), List('a','b'), 5)
누군가가 조언을 주시겠습니까 : 아래로 :
val decoded = decode(t1, List(0, 1))
assert(decoded === List('a','b'))// decoded is returned as List('a') instead of List('a','b')
가 부여 t1
허프만에서
a -> 0
b -> 1
답변 해 주셔서 감사합니다. 예, 문제였습니다. 나는 잎에 닿을 때 비트를 사용해서는 안된다. 또한 머리에 약간의 문제가있었습니다. : 마지막 문자에 도달했을 때 'Nil'부분으로 떨어지는 나머지 부분은 케이스를 간과 한 것입니다. 마지막 요소 인 '케이스 포크'부분에서 추가 점검을해야했습니다. 부분적으로 패턴 매칭이 연결된 목록과 어떻게 작동하는지 오해. – bkm