P11 (*) 游程编码改

问题描述

在P10的算法实现中,若一个元素不连续重复,我们最终也转化为(N E)的形式,即N为1的特殊形式。 该题的要求是特殊处理这一情况,直接将元素复制到结果列表中。如

sash> (encode-modified '(a a a a b c c a a d e e e e))
sash>  ((4 a) b (2 c) (2 a) d (4 e))

解法

按照题目要求,我们只修改let绑定的局部enc,即可。这是封装抽象的好处,能让修改局部化,利于逻辑清晰和维护,对现实中的大项目尤甚。

  • 递归实现
    (define encode-modified
      (lambda (ls)
        (let ([p (pack ls)]
          [enc (lambda (sub) (if (null? (cdr sub)) (car sub) (list (length sub) (car sub))))])
      (let f ([p p])
        (cond [(null? p) '()] [else (cons (enc (car p)) (f (cdr p)))]))))) 
  • reduce实现
    (define encode-modified
    (lambda (ls)
        (let ([p (pack ls)]
          [enc (lambda (sub) (if (null? (cdr sub)) (car sub) (list (length sub) (car sub))))])
      (fold-right
       (lambda (e a) (cons (enc e) a))
       '()
       p))))
  • map实现
(define encode-modified
  (lambda (ls)
    (let ([p (pack ls)]
          [enc (lambda (sub) (if (null? (cdr sub)) (car sub) (list (length sub) (car sub))))])
      (map
       (lambda (e) (enc e))
       p))))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
游程编码是一种无损压缩编码方法,在计算机科学领域中十分活跃。它可以通过将连续重复的数据序列转换为一个标记和一个计数值的方式来减少数据的存储空间。在matlab中,可以使用游程编码实现图像压缩算法。有人使用matlab编写了一个简单的游程编码和解码程序,可以读入一张图片,进行游程编码,然后再解码输出显示。可以使用subplot和imshow函数将编码后的图像进行显示。例如,使用subplot(122)和imshow(uint8(unzipped)*255)函数可以将经过游程编解码后的图像显示出来。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【图像压缩】基于游程编码实现图像压缩算法附matlab代码](https://blog.csdn.net/m0_60703264/article/details/130313532)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [youchengbianma.zip_matlab游程解码_游程编码_游程编码MATLAB](https://download.csdn.net/download/weixin_42659194/86528077)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值