目录中的笔记,和计算机科学相关,理论性质的内容。

和紧贴计算机主题相关的数学,会放在当前目录下。但不包括统计学离散数学等纯数学领域。这些笔记会放在“数学”目录下。

计算机相关通用思想(pattern)

根据吴军《计算之魂》这本书里面提到,还有我自己总结出的计算机中的常用思想:

  • 递归:在数学上,递归表示问题在时间和空间上的拆分。计算机适合一次性处理大量的信息,使用递归作为算法的基础,可以更容易处理相应问题。
  • 迭代:iteration,是迭代。和递归不同,迭代代表事物在时间和空间上的变化,更贴合人脑的“一步一步来”的思维方式。
  • 编码:计算机不能直接处理信息,需要对信息做量化才可进一步处理。所以任何数据,文字、视频、音频乃至人工智能都要量化信息。
  • 分类组合:这是一种二进制思维,是将现实中的问题抽象成二叉树来处理。例如霍夫曼编码就是一种典型的二进制思维。
  • 分治:将大量的数据、算力分而治之处理,而后再合并获取结果。在分布式系统中经常被使用。MapReduce也是一样的思路。
  • 权衡时空:在计算机工程里经常用到,在同样的计算能力下,究竟是利用更长的时间处理?还是利用更多的存储空间?往往需要权衡。
  • 异步并发:复杂的程序要并发执行,编程时尤为关键。
  • 状态: 计算机程序执行的本质,都是状态的变化
  • 随机:真随机还是伪随机?和密码学和网络安全息息相关
  • 等价:也是数学上的关键思维。当我们在重构代码的时候,就是找“等价”的技术方案。
  • 检索:计算机的超能力之一,检索技术也是数据库等领域的关键技术。检索是处理大规模数据最基本的方法。

主要主题

  • 机器学习:使用统计学方法在大量的数据中找寻数学规律,并“教会”机器做一定的模式识别。
  • 数据结构:一维、二维、N维的数据表……可以是数组、链表、树,也可以是图
  • 算法:计算机处理问题的解法