编程要学离散数学吗

看到大家搜索我的网站时有不少是离散数学,下面谈谈离散数学吧。

离散数学Discrete mathematics研究的对象是离散的,什么叫做离散的?离散是相对于连续而言的,离散的意味着不能进行无限的切分。

那么什么在现实世界中是离散的呢?可以举的例子有很多,一般性而言,离散的东西有过程,阶段,凡是可以可以划分成步骤,或者是可以进行计数等等。

如果你仔细回顾离散数学中的内容,你会发现这样子的一些问题。逻辑那里,命题逻辑的单元是最小的命题,而这些命题是具有明显的离散特征的,不能进行切分,可以清楚数出命题的数量。

所以构成命题逻辑的单元是离散的。

等到了一阶逻辑那里,我们深入到了命题逻辑的内部,研究构成命题的要素,可以说我们更加进一步划分了命题。但是这种划分仍旧是没有改变其离散的本质,不能做到无限切分,进而无法达到连续的程度。

在代数那里提到了,笛卡尔积,这个东西是十分重要的,因为他的存在,刻画了一个事物所有可能存在的空间,在这个空间中存在着很多事物,有些事物甚至与我们现实生活中的截然相反,但也是符合常理的,现实生活中之所以会有我们在笛卡尔积上看不到的东西,是因为这个世界在笛卡尔积的基础上增加了限制约束,从而缩小了空间。

事实上,笛卡尔积的空间也是受限的,因为其受限制于构成自己空间的基本元素,仔细想想,这和我们这个世界还是比较相似的,从某种程度上讲,我们都是由有限数量的元素组成的。

这也说明了我们这个世界离散的普遍性。

另外得说说,二元关系的意义。为什么二元关系会有这么重要的意义呢?这个问题要从人类认知的角度来说了,最初人类认识事物的方式是简单的,那么人们如何来刻画这个世界呢?用一元,一元表现出了明显的孤立性,他可以刻画元素,但是无法刻画出元素之间的关系。所以我们需要增加一元,于是形成了二元,即能反映出元素,同时又能反映出元素之间的关系。那么问题是为何不用三元关系,或者更多元关系来作为基础呢,因为三元关系作为基础,那么二元关系那个层面则变得无法表示。而用二元关系却可以表示三元,甚至更多元之间的关系(这在图,树那里会有更多的体现)。于是你会发现,很多人类的科学,都是建立在研究这种二元关系的基础上的,因为这种关系能够达到一种足够的简洁,并且符合人类的思维。比如说,牛顿最初研究的就是两个问题之间的关系,然后假设这种万有引力可以进行某种程度的叠加。仅仅是研究了两个事物(元素),然后做出一些假设(然后就把整个宏观天体上的系统给刻画了出来,如此简洁)。

仔细观察,你会发现几乎说有的运算都可以分解成二元运算,而算子的作用一般也是将两个事物的某种关联进行计算。

几乎所有的关系,都可以分解成二元关系。

另外,在机器学习中,让电脑对数据进行分类,最基础的便是二分类。像特征选择,感知机,支持向量机都是以这个为基础,具体参见机器学习。

然后是图,树。图,树就是一种对于二元关系的扩展,只不过他们将众多二元关系组织了起来,构建了一个大的环境(类似于,将两个星球之间的规律,应用到了整个星系)

图,树是如此普遍。在现实生活中,离散的事物有很多,而事物之间定又会有很多关系,于是自然而然的会有图的结构。

离散的对于现实的意义也正在于此,通过这种图的简化,我们将更易理解事物,在此数学模型上讨论事物,作用算法。

图,树,从某种程度上,只是简单完成了对于世界的刻画,在图,树所描绘的世界中发现信息,找到对于人类有意义的东西,需要的则是一定的算法,算法作用于模型(数据结构之上)。

计算机存储事物也是离散的,这种相似性,决定了可以用计算机处理生活中遇到的离散的问题,或者是可以转化成离散问题的问题。

那么学编程需要学习离散数学吗?

离散数学, 确实可能是一门拼凑的课程, 就像Ruby一样. 所以某位数学系的同学没学过离散, 但却在其他好几门课里把离散的内容学了个遍.

我曾在Youtube上寻找离散的课程, 结果只找到2门, 一门是一个印度大妈讲的, 还有一门来自MIT校友开办的补习学校, 这个补习学校只开了一年就关闭了.

离散既然如此必须, 为什么完全找不到国外大学正规的课堂录像呢? 据MIT补习学校的老师说, 大部分学校都不开离散数学, 因为离散数学的内容已经分散在各个计算机的课程中了.

以MIT OCW资源之丰, 我也只找到一门Mathematics for Computer Science. 里面用了一小部分来讲离散.

所以我的结论是, 未必必须专门学习离散数学, 可以缺啥补啥, 如果什么地方听不懂了, 多查wiki多提问, 把缺的地方补上就行.

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注