数据结构与算法:前言

数据结构和算法是计算机领域的基础,其思想运用在计算机科学的各个方面。这么重要的内容,其书籍和课程也汗牛充犊、数不胜数,书籍比如经典的《算法导论》、《算法》、《数据结构与算法:X 语言描述》等等;课程有 MIT、斯坦福、清华、北大、浙大等优秀精品。那作为一个非计算机专业的小白,又在这里能做些什么呢?此事说来也简单,主要是源自与朋友一起学习的约定,我们一致认为应该用输出来判断是否学过,那这个输出自然就是教程了。

当然,这个只是表面的、直接的原因,还有一些更深层次的原因。首先,由于我自己是完全自学 CS,所以默默刷了不少课程,也都认认真真做了笔记(主要记录课程重点和自己的想法),但是总感觉对工作没起到什么明显的作用,或者说总感觉学完了后并不能把所学的东西很快运用到工作中。这一方面是因为学到的东西不一定马上就正好能用(比如我学了 C 语言,但工作中可能暂时不用写 C 语言代码);另一方面是在学习过程中主观上没有把知识关联起来,学到的都是一个一个的点(比如 C 语言就学习课程教授有关 C 语言的东西)。

因此我觉得需要重新认真审视自己的学习过程:应该主动地去将某门课程与已知的知识点甚至思想串联起来、应该主动地寻找已学到知识点的应用场景(不是只做个作业)。这种情况下,记录就显得非常重要了,因为我们不再是单点突破,而是想要通过一个点带动一个面,任何一门单独的课程都不能够满足我们的需要,所以要写教程,这是第一个深层次的原因。如果说第一个深层次的原因是 “学”,那么另一个更深层次的原因就是 “教”,我是个经济学专业硕士毕业 HR 岗位工作 5.5 年然后转行的 NLP 工程师,认识很多同样是转行的小伙伴,也认识很多想转行但是担心自己 ¥%……&*(此处省略一万种原因),我希望自己的经历能够帮助到一些伙伴,让他们能少走一些弯路;此外,这几天正在阅读费曼的相对论讲义,对他关于 “教” 的理念非常赞同和倾慕,他想让大一大二的学生能够在已掌握内容和对已掌握内容进行演绎的基础上能够学到他要求学生们能够学到的内容。所以,我们需要明确目的,也就是我们为什么要学习数据结构和算法?以及我们到底要从中学到什么?我知道每个人可能都有自己的答案,当然也有不少人可能没想过,不过在这里我觉得我至少可以明确一下。这个目的就是:运用最少的基础知识(熟悉基本的数学和一门编程语言)学习数据结构和算法,理解计算机的思想、甚至解决问题的思想。从中可以学习到:每种数据结构和算法适用于什么问题,如何实现,核心和本质是什么,是否可以迁移到其他领域等等。

丰满的理想谈完了,我需要特别申明一下骨感的现实:我不光是非 CS 专业,还没有完完整整学过任何一门数据结构或算法的课程(感觉有点托大……),说心里话我自己是底气不足的,非常不足,我甚至已经有放弃的打算了,因为我甚至完全不知道应该如何开始,但我已经准备开始了……那,就这样硬上吧,就当是自己学习的一次新的尝试了。By The Way,这里没有提纲或者目录之类的,因为我也刚开始学,不管了,干着看吧。

西蒙《人工科学》笔记

目录

More

自然语言计算机形式分析的理论与方法笔记(Ch17)

第十七章:自然语言处理系统评测

测评的一般原则和方法

两种不同的测评方法:

  • 黑箱评测(外在评测):不关心 NLP 系统内部机制和组成结构,主要根据输入输出结果判断,有助于了解外在的总体性能。
  • 白箱评测(内在评测):对 NLP 内部机制分别分析,测评各组成部分性能,有助于了解内部组成部分的性能。

主要采用黑箱评测,“宽进严出”。

More

NG CNN 笔记

说明:来自卷积神经网络 - 网易云课堂的关键点记录,用来随时查阅,多图(88张)。课程真的很好;)

目录

More

浙大翁恺老师《C 语言程序设计进阶》笔记

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

如果想看 C 语言基础版的,可以移步:浙大翁恺老师《程序设计入门——C语言》笔记 | Yam

小感想:自从大学上过这门课后就再没碰过了。这次学完两门课,写了一些代码,才慢慢有了一些感觉。这种感觉不光是对 C,更是对写代码和深入探索未知的过程。虽然有时候也会情绪低落、状态低迷,什么都不想做,但整体还是蛮开心的,也从没有想过放弃。希望能在这条路上与更多的小伙伴同行。

目录

Week1:指针与字符串

指针的使用

指针的应用场景1

  • 交换两个变量的值

    1
    2
    3
    4
    5
    6
    void swap(int *pa, int *pb)
    {
    int t = *pa;
    *pa = *pb;
    *pb = t;
    }
  • 函数返回多个值,某些值就只能通过指针返回

    • 传入的参数实际上是需要保存带回的结果的变量

More

NLP 与人工智能

NLP 很难,但如果用一句话概括这种难度,应该是 “语义理解”,也就是让机器理解自然语言。“理解” 的意思是它明白那句话是什么意思,这个意思包括字面表现出来的意思和字面背后说话人实际想要表达的意思。比较上层的应用自不必说,即便是最底层的分词、词性标注、句法分析等任务也是同样涵盖在内。“分词” 是汉语以及其他一些没有对词语进行分割的语言才需要做的,而汉语相比其他语言除了分词上的问题外,还有大量汉语本身的特殊问题。仅拿文字处理举例,汉语中看似完全相反的话可能表达的是一个意思,比如 2018(CCF-GAIR)NLP 专场云孚科技张文斌分享的几个例子:了得 VS 了不得,我可想死你了 VS 你可想死我了;汉语的抽象程度相对更高,往往几个字就表达了很多东西,这点可以通过书籍的薄厚程度就能感知一二;汉语最小单元汉字数量非常多,相比英语熵要大很多。再说分词,之前看过一篇文章讲到分词,提到两个观点:第一,分词的主要目的是消除歧义;第二,汉语的不分词是导致其在世界范围内流传不广、难学的主要因素之一。我对这两个观点都比较认同,不分词从认知的角度来说的确需要更多的注意力,其实我们阅读过程中大脑后台已经做了分词,所以文字的不分词有点感觉是浪费人的精力。当然其他如词性标注、实体识别、句法、语义角色等任务也有类似的问题。

More