编程 || 信息是什么

作者: 快语 | 来源:发表于2022-04-14 12:08 被阅读0次

    这是系列文章第三篇。

    对于计算机的第一印象

    大家还记得小时候第一次接触小霸王或者游戏机是什么感受?
    我小时候非常沉迷于此,坦克大战啊,魂斗罗啊之类的,都是人生美妙的体验。
    我从小就用小霸王学习机、计算机去学习(笑)。其实是玩游戏。玩这些游戏的时候会觉得不可思议。但这个时候其实是迷惑的,

    信息——消除不确定性

    莫尔斯码

    我们想一个场景。10岁的时候,你朋友住在隔壁楼。深夜了,你还想和他聊天交流。假使当时没手机、没电话、没电脑。怎么办?这时你拿出一个手电筒。
    你通过手电筒的长亮、短亮,表达你的想法。你们会约定一些长亮、短亮的组合,以及它们背后所指代的关系。
    这套方法,也有人实现了,它就是著名的“莫尔斯码”。它的两个要素,一个是“点、划”,另一个是“映射表”。



    我们再考虑一个问题,点划的数目,能表示多少信息。



    1个bit的信息量,就是1个空格上,1个点或1个划的选择。是在2种可能中选择确定的一个。
    2个bit的信息量,是在4种可能中选择确定的一个。
    ……
    10个bit的信息量,是在1024中可能中选择确定的一个。

    通过莫尔斯码,我们很好地理解了1bit信息能表达的内容。

    布莱叶盲文

    我们再看另一个例子。以下是布莱叶盲文,用6六个或轻或重的点来表示。



    那么”you and me“的表示:



    但是感觉比较低效是不是。所以,有了二级布莱叶盲文,当码字单独出现时,就不是表达一个字母,而是一个单词。这也是一种“约定”。

    那么"you and me”可进一步简化地表示为:



    一个6位的布莱叶盲文可以表示多少不同的码字?参考上节莫尔斯码,不难想到是2^6=64。
    当然,还有没用到的编码,也不要去浪费。于是针对“高频”的字幕组合,有以下表达。这也是一种“空间换时间的思想”。

    于是"about”表示为:

    结束了吗?其实还有一些优化,比如我们仍然没用全64种信息。不过对于理解已经够了。
    这是我们学的第二套编码,通过6bit的信息,灵活组合,可以表达所有内容。

    计算机中用的编码

    • 英文ASCII码,8位,实际使用7位,2^7=128种字符
    • 汉字GBK,16位,实际使用15位
    • UNICODE、UTF-16、UTF-8,将全世界的文字收录
    • 等等

    所有这些编码,都是对信息的不同表达。各自的目标不同,解决的问题背景不同,就出现了不同的编码。我们看到的一些趋势是,后一代的编码总会在前一代的基础上做一些改进,或是能表达的信息更广了,或是用更精简的方式表达更多的内容。这也是解决问题范式,所有产品都是解决了某个问题,慢慢演化来的。世上没有初诞生就最好的设计,也无需。有的是不断出现的新问题,和不断出现的解决方案。

    小结

    本篇内容来自《编码:隐匿在计算机软硬件背后的语言》一书。强烈推荐给大家。
    从0学编程,为什么要专门单独拎出一节课讲它?
    我们看到的最多的,是偏业务层的数据结构,也会看到一些不好的设计,有时候冗余,有时候歧义,有时候缺失。其实这就源于对“信息”这个概念模模糊糊的理解。
    通过学习莫尔斯码和布莱叶盲文,我们知道信息的表达要做到这两个要求:

    • 准确
    • 高效

    信息,和数据结构,其实是非常相近的概念,共享“准确、高效”这两个核心要求。我们也许不会和二进制打交道,但是,我们所学所写,都是广义的“信息”。除了在编程,在其他领域,也应该以“准确、高效”要求自己。

    相关文章

      网友评论

        本文标题:编程 || 信息是什么

        本文链接:https://www.haomeiwen.com/subject/dywisrtx.html