浙大翁恺老师《程序设计入门——C语言》笔记

说明:本文档为浙大翁恺老师《程序设计入门——C语言》课程内容笔记,主要记录学习过程中的一些重要或自己不懂的知识点,内容不一定适合其他人。

翁老师讲课真的很通俗易懂,这个课程作为入门课难度适中,推荐需要学习 C 语言的同学从这门课开始。

目录

  1. 程序设计与 C 语言
    1.1 计算机和编程语言
    1.2 C 语言
    1.3 第一个程序
  2. 计算
    2.1 变量
    2.2 数据类型
    2.3 表达式
  3. 判断与循环
    3.1 判断
    3.2 循环
  4. 进一步的判断与循环
    4.1 逻辑类型和运算
    4.2 级联和嵌套的判断
    4.3 多路分支
    4.4 循环的例子
    4.5 判断和循环常见的错误
  5. 循环控制
    5.1 循环控制
    5.2 多重循环
    5.3 循环应用
  6. 数组与函数
    6.1 数组
    6.2 函数的定义与使用
    6.3 函数的参数和变量
    6.4 二维数组
  7. 数组运算
    7.1 数组运算
    7.2 搜索
    7.3 排序初步
  8. 指针与字符串
    8.1 指针
    8.2 字符类型
    8.3 字符串
    8.4 字符串计算

期中测验
期末考试
附录

1. 程序设计与 C 语言

1.1 计算机和编程语言

  • 人:What to do;计算:How to do
  • 计算机做的所有事情都是计算,计算的步骤就是算法。
  • 程序的执行
    • 解释
    • 编译

1.2 C 语言

  • 历史

    • FORTRAN - BCPL - B - C
    • 1973 年 3 月:第三版 Unix 上出现了 C 语言编译器
    • 1973 年 11 月:第四版 Unix 完全用 C 语言重写
  • 版本

    • 经典 C

    • 1989 ANSI C

    • 1990 ISO 接受了 ANSI 的标准——C89

    • 1995 1999 两次更新:C95 C99

  • 应用

    • 操作系统
    • 嵌入式系统
    • 驱动程序
    • 底层驱动:图形引擎、图像处理、声音效果等

1.3 第一个程序

More

线性代数的本质笔记

说明:来自:3Blue1Brown,关键点的记录,用来当笔记随时查阅和再学习的。多图。
感谢作者的付出,真心很赞。

吐槽一下:B 站真的不是看学术视频的好地方,乱七八糟的弹幕每次要屏蔽,连续暂停会卡顿,快进快退会卡顿。

后面六个视频要多看几遍。

目录

序言

几何水平上的理解能让你判断出解决特定问题需要用什么样的工具,感受到他们为什么有用,以及如何解读最终结果。数值水平上的理解则能让你顺利应用这些工具。

向量究竟是什么?

将向量看作运动(就像在数轴上一样)。

看作空间中的箭头,看作数字列表。

线性组合、张成的空间与基

将向量看作单位向量的缩放(缩放向量并相加):选择标量,对向量分别进行缩放,然后把结果相加。

如果选择不同的基向量会怎样?

它同样允许我们在一对数和二维向量之间自由转化。但这种变换关系与之前用 i 帽和 j 帽的变换关系完全不同。

每当我们用数字描述向量时,它都依赖于我们正在使用的基。

但当共线时,它们张成的空间就是终点落在一条直线上的向量的集合。

两个向量张成的空间实际上是问仅通过向量加法与向量数乘这两种基础运算,能获得的所有可能向量的集合是什么?

Trick:单个向量看作箭头;多个向量看作点(否则会太拥挤)。所以对大部分二维向量对来说,它们张成的空间是整个无限大的二维平面;但如果共线,它们张成的空间就是一条直线。

三维与二维类似:当你缩放第三个向量时,它将前两个向量张成的平面沿它的方向来回异动,从而扫过整个空间。另一种思考方式是:利用自由变化的三个标量,从而得到空间中所有的三维向量。

一组向量中如果有至少一个是多余的(没有对张成空间做出任何贡献,如二维的共线、三维的共面等),也就是移除那个向量而不减小张成的空间,此时它们是 “线性相关” 的。另一种表述是,其中一个向量可以表示为其他向量的线性组合,因为这个向量已经落在其他向量张成的空间之中。

另一方面,如果所有向量都给张成的空间增加了新的维度,它们就被称为 “线性无关” 的。

空间的一组基的严格定义:张成该空间的一个线性无关向量的集合。

More

微积分的本质笔记

说明:来自:3Blue1Brown,关键点的记录,用来当笔记随时查阅的。多图(69张)。
感谢作者的付出,真心很赞。

目录

导论

微积分的三个中心思想:积分、微分、两者互逆。

(难怪正态分布这么多见……)

f(x) 可以是任意函数

微积分基本定理:积分与导数之间的来回转化关系,也就是某个图像下方面积函数的导数能够还原出定义这个图像的函数。它将积分和导数两大概念联系起来。

More

机器学习概念

有幸与 ahangchen (梦里茶) luopengting (lpt) 一起参与了《机器学习》(周志华)概念整理项目,今天正式完稿。我负责整理了以下章节:

最终的电子书:西瓜书概念整理。欢迎大家阅读。如任何疑问或建议,随时欢迎提出。

注意:

  1. 由于作了一些简化,可能会与上面链接中的内容不太一致。
  2. GitHub 中公式无法渲染,下载到本地即可,推荐用 Typora — a markdown editor, markdown reader.

人工智能哲学笔记

目录

背景

  • 来源:复旦大学公开课:人工智能哲学_全 7 集_网易公开课
  • 讲师:徐英瑾教授
  • 课程介绍:本课程从人工智能科学发展的科学史概要出发,讨论了哲学思辨和人工智能研究之间的密切关系,并从人工智能的角度,重新审视了近代欧洲哲学对于 “机器是否能够思维” 这个问题的思辨结论。尔后,讨论了如何从当代计算机科学的角度来解读康德哲学,并从中得到一个关于类比推理的计算模型。本课程也讨论了当代美国哲学家塞尔对于 “计算模型如何获得关于符号的语义知识” 的忧虑,并进一步探讨了这一忧虑在计算机科学内部的表达形式:框架问题。

More

Gan 原理、证明与实现

说明:本文主要介绍 Gan 的基本原理、证明过程及简单的代码实现。这里是文章链接:Gan

  • 文章目录
    1 简介
    2 证明
    2.1 概念与过程形式化
    2.2 理论推导
    2.3 证明
    2.3.1 最优判别器
    2.3.2 最优生成器
    2.4 重述训练过程
    2.4.1 参数优化过程
    2.4.2 实际训练过程
    2.4.3 最终过程
    3 代码
    4 代码学习
    5 应用
    6 数据集
    7 其他资料
    8 参考文献

  • Demo1: 手写数字生成

  • Demo2: 二次元头像生成

由一场供应链讲座引发的思考

今天恰逢时机听了一场刘大成老师关于物流和供应链的讲座,略有所感,记录如下。

一直在思考所做项目的问题,中间基本处于一心二用的状态,只是抽几个有所感触的点记录。第一,顶层设计;第二,源头和本质。

顶层设计

有三个例子我觉得特别有意思。

第一个是秦始皇的长城,怎么理解这个顶层设计呢?我们知道,长城第一次完整的修建是在秦始皇统一六国后,当时修建长城的战略意义是防止北方游牧民族入侵。游牧民族那时候被称为半兽人(掠夺和存储财产),他们从来没有补给线,不存在后勤保障的问题,基本是以战养战;相反,秦国则需要从长安运送粮食过去,基本的比例是三担粮食,两担消耗在运输中,一担供给前线,因为道路不好,运输工具是牛(农村的朋友应该知道牛是有多慢,不过它力气大),太慢了(这其实是个物流问题😅)。而长城解决了两个问题:第一,游牧民族的马上不来,进攻速度受到影响,同时后勤供给反过来成了影响他们的一个问题;第二,在长城内驻守军民可以开荒,需要多少粮草种多少,解决了后勤保障问题,其实之后的防守也一直都是这么做的。

讲到这里的时候还有个题外话:为什么四大文明古国除了中国都消失了?一个很重要的原因是天然屏障,我们东、南有大海,西有喜马拉雅和青藏高原,北有长城,很好地阻隔了外强入侵。另外,恶劣的环境下才能最早孕育出文化,比如是黄河、尼罗河、印度河、幼发拉底等流域,而不是长江、爱琴海、亚马逊等。举了个非洲人很懒的例子,说他们每个人坐在一棵水果树下,饿了就上去摘一个水果吃,吃完了就换一棵树。有一些道理,权当调味品就行。

第二个是隋炀帝的京杭大运河。我们且不说真实历史中的隋炀帝如何,不过单就他的这项工程确实很了不起。京杭大运河(隋朝)北起长江南岸之京口(今镇江),南通余杭(今浙江杭州),全场两千七百余公里。当时的目的是为了加强中央对东方和南方的统治,同时也是为了从南方漕运粮食,便于对北方用兵,对南北经济、文化交流起到巨大作用,只是想想牛车和船只的巨大区别就知道意义所在了。当然,我觉得杨广当时可能没有想到这一层:)

第三个是 Jobs 的 ITunes 和 AppStore,真正让其他手机厂商感到无解的可能既不是 IPhone,当然更加不可能是 IPad,Mac 之类,我当然不否认这些东西非常 Nice。他的这一套与创作者捆绑的机制简直把音乐人、开发者都拉进了自己的阵营,而他们一旦习惯了这种模式,路径依赖就会发生作用。我自己觉得这点蛮有启发的。

这就是顶层设计的三个小例子,挺有感触,因为这个东西适用于很多方面,它更多的是一种思想。比如我们熟知的 git,比如我们常说的 “结构效率高于运营效率”,比如我们感触深刻的 “三观和志同道合”……顶层设计一旦做好,剩下的就是不停进化、完善。也许,“物竞天择,适者生存” 是生命和社会发展的顶层设计,前者是导向,后者是结果。我甚至觉得这就是最本质的顶层设计,试想一下我们所能想到的所有东西,无一不符合这条设计,生命自不必说,从我们每天用的手机、打开的 APP、浏览的网页、吃的美食、买的衣服……有哪项不是这样呢?再把 “物竞天择” 四个字拆开来解读,又会发现新的不一样的意味。有关这部分内容不再赘述,我正在写一篇《关于世界、宇宙与评价、选择》的文章,感兴趣的可以关注。

谈个题外话,无论男女,在找对象时,首先应该考虑的也是 “顶层设计”,也就是你俩在这方面是否一致。一致最好,如果不一致趁早分开的好,省得到时候更加痛苦。也许有人会说,人都是可以改变的嘛,没错,我非常认同 “人是会改变的” 这个观点,但是恕我很难相信有人能真正改变自己的 “顶层设计”,“江山易改本性难移” 我想说的就是这个意思。另外,对组织、商业、政策来说,“顶层设计” 更加重要,因为它几乎无法改变。经济学中有一个分支叫 “制度经济学”,里面有个非常基本的概念 “路径依赖”(大牛诺斯提出),就像物理中的 “惯性”,在受到外力之前保持之前的运动状态。想想键盘的例子可能会更加有感觉。最后,其实代码工程也一样,刚开始的不合理设计可能会导致后面无穷无尽的麻烦,程序猿肯定听过 “百度 GCC 被三体人锁定在 3.4.5 版本” 的段子,不知道的搜一下百度:)当然,运用到具体场景得看实际情况,这个是常识。好了,题外话到此为止。

More

Language Model Note (SLP Ch03)

Ngram

  • Count up the frequency and divide (use maximum likelihood estimation or MLE):

    • PML(xixin+1,...,xi1):=c(xin+1,...,xi)c(xin+1,...,xi1)P_{ML}(x_i | x_{i-n+1} ,..., x_{i-1}) := \frac {c(x_{i-n+1,...,x_i})}{c(x_{i-n+1},...,x_{i-1})}

    • Example: $$P(you | i\ love) := \frac {c(i\ love\ you)}{c(i\ love)}$$
    • More Generally: $$P(w_1^n) = P(w_1)P(w_2 | w_1)P(w_3|w_1^2)…P(w_n|w_1^{n-1}) = \prod_{i=1}^{n} P(w_i|w_1^{i-1})$$
  • For N-gram

    • Next Word: $$P(w_n|w_1^{n-1}) \approx P(w_n|w_{n-N+1}^{n-1}) = \frac {C(w_{n-N+1}^{n-1}w_n)}{C(w_{n-N+1}^{n-1})}$$
    • prob of sentence: $$P(w_1^n) \approx \prod_{i=1}^{n} P(w_i|w_{i-1}…w_{i-N+1})$$
  • For Bigram

    • prob of sentence: $$P(w_1^n) \approx \prod_{i=1}^{n} P(w_i|w_{i-1})$$
    • Next Word: $$P(w_n|w_{n-1}) = \frac {C(w_{n-1}w_n)}{\sum_w C(w_{n-1} w)} = \frac {C(w_{n-1}w_n)}{C(w_{n-1})}$$

More