数据结构和算法学习之路-----必要的数学知识

  各位“仙友”好,好久不见。在这之前,我写了一篇序言,描述了我自己的学习数据结构和算法的大致流程。最近呢,也在整理自己大学时候学过的一些高数、线性代数和概率论的相关知识,都是一些比较重要的。我自己来说,也不是很喜欢去证明一些数学定理,但在最开始学习的时候也尝试去证明一些定理,所以喜欢深究一些数学定理的小伙伴可以自己去证明一下。

  我在这里分4个方面来简单说明一下哪些数学知识在我看来必须要掌握:

  1、高数;

  2、线性代数;

  3、概率论;

  4、数学建模。

  在这里多提及了一个数学建模的知识,我也是最近有学习,之前读书的时候太贪玩,没有下功夫去深入学习。我也只说一下哪些数学建模的模型需要去了解和熟悉,因为在做一些数据结构的时候,需要自己去构建解决问题的模型。对于其它三种知识,我相信厉害的人大把的是,我就直说一下要掌握什么知识,对于怎么去求解或者是证明,这里不累赘的说了。

  1、高数的基本知识:

  学过高数的人,肯定经过了九年义务教育并且大部分也经过了冲动的高中时代。从最开始学习谭大哥的《C语言程序设计》的书中可以看到,最开始的题就会问你质数、素数等小学就该掌握的知识。当然不是所有的知识都能用上,但是对于实际的问题就得实际去分析了。我认为比较重要的知识点如下:

  (1)集合;

  (2)关系;

  (3)函数;

  (4)图;

  (5)树及其特殊树的类型;

  (6)求和公式及其性质;

  (7)确定求和时间的界限;

  (8)微积分的求解和体表面积分析;

  (9)数学的基础理论(如质数的定义等)。

  以上的知识包含一些数学基础知识和一些离散数学的知识,不过都挺重要的,我把图和树都归纳到上面,是因为图和树也被划分为离散数学这一类。当然不仅仅是树有其特殊形式,图同样的也有,有向和无向,加权和不加权等等。其实很容易看出来,所谓的知识大部分都是基础知识,包括在工作中使用到的也大部分是基础知识,由基础知识扩展开来,往上开发。我目前虽然会用很多的定理,但也需要不断的学习,不然很久没有去用就可能会暂时忘记。业精于勤,都多加练习才是。

  2、线性代数的基本知识:

  其实,在有趣的程序世界里面,线性代数有很多的体现,文件压缩、图像音频解压缩等领域,经常都会使用到,但这些知识的基础无非就需要你去掌握线性代数的两个很重要的知识:

  (1)矩阵的定义、概念和基本的性质;

  (2)矩阵的基本运算。

  我目前来说,可能能力还不够,接触到的领域还太少,或者不够深,我能用到的就这两大部分。从字面上看,看起来挺容易,确实也不难,难的是去证明定理的正确性。在代码编写的过程中,同样也会存在很多的问题,那很大一部分原因就是对矩阵的定理掌握得不熟悉,从而逻辑或者是运算上出现差错。我在这上面犯过很多的错误,所谓不知疼不长记性。大家可以去网上看看那些考研老师讲解线性代数的视频,学习一段时间差不多基础部分就能够掌握了。

  3、概率论的基本知识:

  概率论中,其实我发现很多都会用到数学的一个共性,那就是数学归纳法,统计法。这样去做的目的主要是去证明当前所选择的数据结构和算法是否适用于去解决当前存在的问题。概率论的相关知识,在学习数据结构时,我个人观点是非常重要的,因为常常是概率论的知识能够帮你大忙。

  (1)计数和数据分析;

  (2)概率及概率计算;

  (3)离散随机变量及统计分析;

  (4)几何分布与二项分布;

  (5)二项分布的性质和定理。

  我记得贪心、动态规划差不多都需要经过概率论的证明,选择最优的算法中,常常也需要自己去计算分析。当然,不论是高数、线性代数还是概率论都是属于数学的范畴,有种思维叫做逆向思维,解题或者证明的时候都可以通过反证法来更进一步证明理论的可靠性。我在学习的过程中,总在正面证明时卡壳子,然后逼到迫不得已用反证法来强行说服自己,有点搞笑哈。

  4、数学建模的基本模型知识:

  我也是最近一段时间想起来,不管是什么难题,人们都能够抽象出一个模型来,找模型的规律或是模型的特性,然后根据一些性质去解决问题。数学建模给我的感觉就是这样的,在一个难题面前,要敢于把难题抽象成模型,不断的找方法去求解。在这里,我建议大家可以跟我一样去网上看相关数学建模的视频教学,英语好的朋友当然推荐国外的视频学习,理解直接爆开,不像我说的这些,直接裂开。

  (1)包饺子模型;

  (2)存储模型;

  (3)消费者选择;

  (4)预测模型;

  (5)预订票策略;

  (6)席位分配策略;

  (7)蛛网模型。

  这里只列举一小部分的模型策略,学习这些模型时,自己也可以通过自己的理解去建立新的模型。我反正每次都想得多,虽然很多都没什么实际意义,但是我觉得还挺有趣。这个数学建模其实跟数据结构存在异曲同工之处,都是通过一种方法去解决实际问题,所以我很推荐先去学习数学建模相关的知识,再去慢慢学习后面的知识。

  我也在慢慢进步,很多地方说的不好,希望大家理解。每一个人都有自己的学习办法,跟着自己的感觉走就对了。后面的博客中我从最简单的题型进行自己的说明,会附上自己的代码和调试结果。如果存在问题或者更好的解决办法,麻烦大家能够一起探讨或是指出来。

  上面所有的理论知识,我还是建议能够找到视频学习的最好,方便快捷。这里就只付上公开的课程了(数学建模):

  http://open.163.com/special/cuvocw/lixingshijiao.html,这个课程目前是免费的,我也是跟着这位老师在学习,感觉还不错。其它的理论课程因为有可能侵犯别人的权益,这里就不放上链接了。希望大家理解。

  同进步,共思考,趣人生。

  IDEA,DING!

  

  • 9
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉夢志昂丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值