加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

算法 – 霍夫曼解码(在Scala中)

发布时间:2020-12-16 18:14:32 所属栏目:安全 来源:网络整理
导读:我正在尝试编写一种算法来执行霍夫曼解码.我在 Scala中这样做 – 这是Coursera课程的作业,我不想违反荣誉代码,所以下面是伪代码而不是Scala. 我编写的算法采用树形树和位位列表,并且应该返回消息.但是,当我在提供的树上尝试它时,我得到一个NoSuchElementExce
我正在尝试编写一种算法来执行霍夫曼解码.我在 Scala中这样做 – 这是Coursera课程的作业,我不想违反荣誉代码,所以下面是伪代码而不是Scala.

我编写的算法采用树形树和位位列表,并且应该返回消息.但是,当我在提供的树上尝试它时,我得到一个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,char(leaf) + charList)

        else aTree is a fork:

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

     dc(tree,bits,[empty list])

     }

在此先感谢您的帮助.这是我第一次使用StackOverflow,所以我可能有一些学习如何最好地使用该网站.

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读