首页 > 数码 > 不插电编程课 | 文字和图片的压缩

不插电编程课 | 文字和图片的压缩


们每天使用的数据,从文字、图片、声音到视频,无一不是经过压缩的,而压缩、解压的过程隐藏在了各种 App、服务的背后。那么我们的孩子们能 get 到“压缩”的 sense 吗?他们能理解图片和文字压缩的原理吗?


这堂课我们是这样教孩子压缩的原理的。


课程目标


★ 理解并使用文字、图片的基本压缩方法

★ 培养计算机科学素养


课程工具


★ 英文儿歌《Pease Porridge Hot》解码游戏纸

★ 英文儿歌《Hickory dickory dock》打印稿

★ 英文儿歌《Three blind mice》打印稿

★ 图片压缩游戏纸

★ 白板&白板笔

★ 签字笔


课程时长


90 ~ 120 分钟


课程设计思路


本课的文字压缩编码方法参考了 LZ 编码 ( Ziv-Lempel Coding ) 方法,既是从一段文字中找出重复的字符或字符串,标注好相互参考关系后,将重复的划掉,剩余字符越少越好,参考关系越简单越好。


本课的图片压缩编码方法参考了变动长度编码 ( RLE, run-length encoding ) 方法,以黑白两色的像素图案说明,用数字标注每行黑、白像素的数量。


同之前的课程一样,我们用游戏的形式让孩子理解压缩的原理:文字部分采用英文儿歌,其文字简单、重复部分多;图片部分仅用非常简单的黑白图片;游戏过程设计了正向编码和反向解码两个过程,保证孩子理解和运用。


本课程内容仅涉及编码原理,不涉及实现方法;是为计算机科学基本素养内容。


课程设计思路


我们可以从上节课开始说起。



上节课的搜索算法,搜索的是庞大的数据。而这些数据在互联网上传输的时候,实际上是经过压缩的。


我们为什么要压缩数据?数据压缩了以后,体积更小,传输更快,我们就能更快的看到我们想看到的内容。


那我们是如何压缩这些数据的呢?我们又是如何把压缩的数据还原的呢?


今天我们就一起来玩玩压缩和还原压缩(解压缩)的游戏!


先以文字数据为例,一起来看看我在白板上写好的儿歌《the Rain》。



Pitter patter

Pitter patter

Listen to the rain

Pitter patter

Pitter patter

On the window pane

The Rain


老师先带着孩子一起读读这首小诗,感受一下诗歌的韵律和美感。简简单单的几个单词,那淅淅沥沥的小雨拍打着窗格,仿佛就在眼前。多么恬静,多么诗意,多么美。


有些孩子歪着脑袋眨着眼睛,被语言的美丽陶冶着。



但是也会有些孩子喊:“这怎么成了英语课了?我不想学英语!?”


我不知道英语课对这些孩子做了什么 ?,怎么提到学英语就这么抗拒。


我们这就是在学习!学习哪里分什么语文课数学课英语课,每时每刻,每件事情,我们都是在学习,也都是在玩耍!我们要抓住每一个机会去学习,去感受,管它是什么课呢!


感受完了,我们要开始去压缩它了。


“我们的目标是要删除掉尽可能多的字母!但是我们也要让那些没有读过这首诗的人,拿到压缩后的文字,也能把诗原样还原出来!大家看看有没有什么办法?”


孩子很快发现,这里有很多重复的句子,我们留住第一句,后面的都能删了!


把句子画上线框,用带箭头的线连接,就可以把后面的重复语句从线框里删除了!



整句的文字删除后,孩子一般不会想到单词内字符串的提取和替换;接下来还有单个字母的提取替换。老师要带着孩子,一步步细化下去。最终孩子们会惊叹于仅留下如此少的字符,但我们仍然可以还原出整个小诗。


例子讲解完后,我们就要做第一个游戏啦!还原诗歌《Pease Porridge Hot》!


给每个孩子发游戏纸和签字笔。这次用签字笔是因为孩子需要画很多连线,如果用比较粗的彩笔,会乱成一团。



孩子开始还原之前,要提醒孩子:压缩诗歌时,我们要先从整句开始,到一串字母,再到单个字母;但在还原诗歌时,我们就要反过来,先解决单个字母,再看一串字母,最后看整句话。



还原后,我们同样要一起把这首诗歌朗诵、欣赏一遍。原来外国小朋友经常喝豌豆粥 (pease porridge) 啊,我们好像没有这个习惯呢。


“他们应该喝绿豆粥!绿豆粥降火!”


哈!好吧!?


做了还原压缩,接下来我们该做正向的压缩了!


给孩子们下发《Hickory dickory dock》



有些孩子还学过这首儿歌,那干脆大家一起唱一唱吧!



压缩的原理孩子们都会了,无需多言,开始吧!看看能剩下多少字母?



过程中,孩子们容易犯的错误,是先从单个的字母开始找;这样会让压缩过程变得非常零碎,连接线又多又乱,孩子们马上就头大了。老师需要多次提醒孩子们:多关注整体,多关注重复的字母串,最后再看单个字母。


最后到底能剩下多少字母?几乎每个孩子的答案都不一样,因为精简细化的深度不一样。其实答案不重要,老师不必要求他们做到最优化,只要孩子们能正确的运用了这个原理即可。


为了加强效果,我们继续压缩下一首诗《Three blind mice》。下发打印稿。



同样是一首脍炙人口的儿歌。老师教大家一起唱一下吧。



到了这第三个游戏,孩子们差不多已经可以熟练掌握压缩方法,并能正确实施压缩先后步骤了。有的孩子反应眼睛有点累,游戏结束后,可以课间休息。

休息的时候,有孩子跑来问了我一个特别好的问题:“可是老师,电脑里的文字没有那么多线啊?电脑是怎么还原压缩的呢?”


这个时候,老师要告诉孩子,我们今天学的只是压缩的原理,并不是真正实现的方法。我们先明白电脑都做了些什么就好了,至于是怎么做的,对我们现在来说还太难了,我们以后学了更多的基础知识,一定把它好好研究一下!?




休息结束!文字的压缩游戏玩完了,我们要开始玩图片的压缩了!



我们就先从最简单的图像开始入手。假设这幅图片里,只有一个字母 a。


我在白板上画下字母 a 。


就是酱紫。一个蓝色的字母 a ,没有其他任何物体。如果我们把这张图片不断地放大、放大、放大,我们能看到什么呢?


我在白板上画下一个 5X6 的方格阵,又把里面的部分方格涂黑,形成一个大大的 “a” 字母。



我们看到的图片,实际上就是由这些特别小的不同颜色的小方块在一起组成的。


讨论到这里,可以把“像素”的概念教给孩子们。


接着在讨论如何“压缩”图片之前,我们要先确定一下如何“描述”图片。


我们前面已经学习了二进制的概念,我们是不是可以用二进制来表示这样一张图呢?


当然可以,分别用 0 和 1 代表两种像素,这样我们就要用30个数字来描述这幅图。


而我们“压缩”的目标,就是使用尽量少的数字来表示。


具体方法是酱婶的:



第一行,从左往右分别有1个白色像素,3个黑色像素和1个白色像素,我们就标记成 (1, 3, 1);


同理,第二行就是 (4, 1);


那到了第四行就出问题了。一个黑色像素,3个白色像素,一个黑色像素,也要标记成 (1, 3, 1) 吗?那和第一行怎么区分?方法是:第一个像素若是黑色像素,第一个数字我们就用 0 标记;第二个数字表示黑色像素的数量,第三个数字表示后面的白色像素,依次类推;所以这一行,我们就应标记成 (0, 1, 3, 1) 。



好像并不难嘛!? 那我们就来做个游戏试试看吧!


下发图片压缩游戏纸。



方格右边的数字已经给我们了,我们能不能画出左边的图案呢?


这是孩子们最喜欢的环节了。他们每涂一行,就会一起讨论,猜到底是什么图案,忙的不亦乐乎。



过程中也会碰到一些问题,老师要让他们自己想出解决方法。比如有的孩子总是看错行,该怎么办?马上有孩子说用纸盖住,露出一行涂一行;也有孩子说涂一行打个勾。还有孩子说哎呀老师我涂错了!黑白刚好涂反了!自己想了想又说,那我就都翻过来涂吧!不是也能看出来图案吗??


多么聪明的孩子!



游戏纸上的三个方格阵都涂完,今天的课程就都结束了!下课之前老师还要带着孩子们回顾总结一下文字和图片压缩的原理,布置的作业是回家后想办法把爸爸妈妈也教会!(费曼学习法)



下课!



关于《不插电的编程课》

本课程是清华大学终身学习实验室《不插电的编程课》系列课程中的一节。

此系列课程面向刚刚步入小学的一年级学生,旨在用最简单的工具(摆脱电脑等复杂、昂贵的教具的限制),游戏化的学习方法,教孩子学习计算机科学知识。


往期回顾

不插电编程课丨搜索算法

不插电编程课丨坐标系

不插电编程课丨玩转二进制


特别鸣谢



本课设计过程中,得到了 TULLL研究主管、清华大学心理学系助理教授伍珍老师的大力帮助。

她在建立儿童自信心、成长型思维,培养儿童创造力方面,给出了诸多建议。

在此特别鸣谢!



©2016-2020 張飛 保留所有权利。

友情链接