【问题标题】:Huffman decoding (in Scala)霍夫曼解码(在 Scala 中)
【发布时间】:2017-07-12 09:57:34
【问题描述】:

我正在尝试编写一种算法来执行霍夫曼解码。我在 Scala 中做这件事 - 这是 Coursera 课程的作业,我不想违反荣誉代码,所以下面是伪代码而不是 Scala。

我编写的算法采用树tree 和位列表bits,并且应该返回消息。但是,当我在提供的树上尝试它时,我得到一个NoSuchElementException(空列表的头部)。我不明白为什么。

我知道我的代码可以稍微整理一下——我对函数式编程还是很陌生,所以我以一种对我有意义的方式编写它,而不是可能以最紧凑的方式编写它。

def decode(tree, bits) [returns a list of chars]: {

    def dc(aTree, someBits, charList) [returns a list of chars]: {

        if aTree is a leaf: 

            if someBits is empty: return char(leaf) + charList
            else: dc(aTree, someBits, char(leaf) + charList)

        else aTree is a fork:

            if someBits.head is 0: dc(leftFork, someBits.tail, charList)
            else someBits is 1:  dc(rightFork, someBits.tail, charList)
        }

     dc(tree, bits, [empty list])

     }

提前感谢您的帮助。这是我第一次使用 StackOverflow,所以我可能需要学习如何最好地使用该网站。

【问题讨论】:

    标签: algorithm scala huffman-code


    【解决方案1】:

    如果我理解正确的话,你想通过叉子(从位的方向)直到你找到一片叶子。然后您将叶子值添加到您的 char 列表中,并且从这一点开始您想要重复步骤。 如果我是对的,那么您应该将原始树传递给您的辅助方法,而不是 leftForkrightFork,它们现在是叶子。 所以它会是这样的:

    if aTree is a leaf: 
        if someBits is empty: return char(leaf) + charList
        else: dc(tree, someBits, char(leaf) + charList)
    

    【讨论】:

    • 太棒了!谢谢。这正是问题所在。就在我的脑海里,在屏幕上错了。
    • 我很高兴能帮上忙。那你能批准一个答案吗? :P
    • 哈,是的,对不起,新的。
    猜你喜欢
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多