计算之魂 笔记

7 阅读3分钟

个人笔记,权当自我记录 ,辅以坚持

第二章 自顶向下

计算机的思维:更正自我的思维方式,不是从递推来思考,而是自顶向下,使用递归方式思考。本质是一种嵌套, 在做软件架构设计的时候,也要形成这样的思维,也可以称之为面向对象,而不是面向过程这样的渐进式。

在简单的情况下,人们能想清楚所有的步骤,这种时候就只需要做翻译,即将确定的解法写成计算机能够理解的语言,这种情况下就可以使用面向过程,但如今的程序变得越来越复杂,则应该使用面向对象的方式。

二叉树就是典型的递归思考。其中,任何一个树都可以转换成二叉树,所以只需要研究二叉树的算法即可。

第三章 编码

计算机是通过二进制编码来对事物进行标识,主要是为了去重。而人类对事物的表示往往是从具体到抽象,意思是往往是根据某个地方的特点来命名,而后人几乎都会忘记来由,因此变得抽象。而计算机编码是从一开始就是抽象的。比如ip地址。人们往往使用一座桥梁来与计算机沟通,比如高级语言,域名,这种涉及编解码的机制,就是桥梁。

几个概念:信源、信道、接收者、 编解码

文字是信息的载体。以前用象形文字,现在用中文,表达的是同一个意思,就说明信息本身是不受载体的影响的。

二进制可以引申为很多 每个位只有两个状态的事物。将只有两个状态的事物抽象成二进制,并利用二进制指定唯一数据的特性,可以快速解决问题

计算机只能表达64位,而不是像人一样,没有界限。所以所有的编码在遇到很大的数字或者很小的数字,其实都是精度和范围权衡的结果。当一个很大的数字和一个很小的数字进行加减运算的时候,很可能会发生小数被忽略的情况。所以大数要与大数一起运算,小数要与小数一起运算。也是机器学习算法里面的步长概念,一开始步长很大,但后来越来越小

下面讲讲一些节约编码长度的技巧

差分编码

基于相关性原理,生活中大部分变化是小范围渐变,突变是少部分,所以通过非线性(如log)的编码来扩大氛围,完成粗调,用增量代码来完成精调,例如下:

3210,-2,+4,+5,+9

哈夫曼编码

用最短的路径表达最常用的数字,即核心资源供给常用功能。