- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
本文由简悦SimpRead转码,原文地址
你好,我是公瑾,欢迎来到《程序员的数学课》。一些同学可能知道,之前我在拉勾教育就开设了一个
《数据结构与算法》课程,目的是帮助大家提升编码能力,打牢代码基础,在结也受到许多同学的
好评,表示所讲的内容在面试和工作中都很有实用性。
编程一类的基础能力固然重要,但这些依旧不是程序员全部的“立足之本”。个人角度而言,从我在
院的博士经历,再到后来从事机器学习、数据挖掘等算法研发工作,都是数学作为我的基础思维
能力支撑我一路走来。
程序员为什么要注重数学?
在《数据结构与算法》课程中,许多留言问题高频集中在:复杂度如何计算、某个代码优化是否降低了
时间复杂度,或者是动态规划的状态转移方程问题,等等。这的确是在学习数据结构中遇到的,但
剥离了外壳,你会发现本质上都是数学问题。
举个例子,对于一个有序数组中查找目标值的问题,应该采用二分查找算法。而且随着数组元素越来越
多,二分查找相对全局遍历而言,性能上的优势会越来越明显。从数学视角来看,这是因为当x很大
时,lnxx。比如x=100,ln100=4.6100。
y=lnx与y=x的函数图
可能许多同学知道二分查找效率更高,但二分查找的代码,是需要采用递归进行实现的。很多同学为了
实现方便,就会考虑采用搜索的查找方式,也就是一个for循环搞定。但如果你知道了它背后的数
学原理,并且深刻体会到ln100=4.6100,你就再也不会用for循环去实现有序数组的查找问题了。
此外,数学还可以帮助你降低代码的复杂度。
我们看一个编程问题。一个数组中,只有数字obj出现了一次,其他数字都出现了两次。请查找出
obj,约束为O(n)的时间复杂度、O(1)的空间复杂度。
例如在数组a=[2,1,4,3,4,2,3]中,则输出1。因为2、3、4都出现了两次,唯独1只出现一次。
这是个在无序数组中,涉及与其他元素匹配的查找问题。常规解法的复杂度应该是:O(n²)时间复杂
度、O(1)空间复杂度,或者O(n)时间复杂度、O(n)空间复杂度。显然,这并不符合题目的约束。
要想解决这个问题,需要借助数学的异或运算。异或有这样两个性质:第一,任何数异或自己为零;第
二,任何数异或零,是它自己。借助异或运算,你只需要把数组a中所有元素计算一下异或就可以得到
obj了。实现起来,就是如下所示的O(n)时间复杂度的for循环,且不需要额外开辟复杂变量。
从上面的例子中你便能认识到数学的重要性,越是优雅的程序,越是能用简单的代码实现同样的需求。
工作场景之外,在求职面试中,大量的算法题也是对程序员数学能力的考察,与其直接海量刷题,不如
先打好知识基础和建好思维逻辑,再有方法论地刷题,才能未雨绸缪、有备无患。
程序员学数学有哪些痛?
下定决心开始学习数学,绝大多数的程序员都会下面几个问题。
第一,数学的海洋过于广阔,不知道学什么。
从数学的知识体系看,它至少包括了微积分、线性代数、几何、概率论、数理统计等内容。而对于程序
员,只需要精通那些对代码开发有指导性帮助的数学知识就足够了。那么哪些数学是必要的呢?又如何
区分必备的数学知识的边界呢?这对于许多程序员来说是模糊的。
第二,各种数学理论,如何联系到工作实践中?
结合前面“降低代码复杂度”的例子,你会发现自己很难想到利用“异或”去查找前面数组中的obj。先从
编程思想来看:时间复杂度是O(n),这就意味着可以使用一个for循环;空间复杂度是O(1),这就意味
着处理过程只能做一些基本运算。
接着围绕题目来看,除了obj以外的元素都出现两次。奇想一下,如果可以有一个类似于“连连看”
的计算,能把相同元素清掉,最终不就只保留了obj吗?“相同元素”清掉,这就是异或运算口诀中的“同
零异一”,这就与异或的数算构建了联系。因此,学习数学时,死读书是没用的,必须落地到实
践,做到知行合一。
第三,数学本身很难,工作又很忙,不知道怎么学?
不说,数学并不简单。学好数学,必要的时间、脑力投入肯定少不了。然而程序员节奏紧张,工作
大,这就要求程序员在学习数学的时候,必须掌握学习方法,提高学习效率。这也是我们本课程要
解决的问题。
我将怎么带你学数学?
如果你是数学专业者,需要追求
您可能关注的文档
- 仓库库存查询操作指南与系统步骤说明.pdf
- 流体密封技术咨询与产品选型服务指南.pdf
- 各类保险及实施.pdf
- 图形运动二知识梳理与例题.pdf
- 深度解析(2026)《JB 6481-1992蓄电池车辆用直流斩波器》.pptx
- 深度解析(2026)《JBT 2602-2016工程机械 组合式履带总成》.pptx
- 深度解析(2026)《JBT 3955-2016矿用一般型电力变压器》.pptx
- 深度解析(2026)《JBT 4208.18-1996冷镦模具通用件顶料杆C型》.pptx
- 深度解析(2026)《JBT 10929-2010上辊万能式卷板机》.pptx
- 深度解析(2026)《JBT 12092.1-2014模具研配液压机 第1部分:型式与基本参数》.pptx
- 深度解析(2026)《SNT 2497.23-2010 进出口危险化学品安全试验方法 第 23 部分:细胞器的分离实验方法》.pptx
- 深度解析(2026)《SNT 2517-2010 进境羽毛羽绒检疫操作规程》.pptx
- 深度解析(2026)《SNT 2755.2-2011 出口工业产品企业分类管理 第 2 部分:企业分类基本要求》.pptx
- 深度解析(2026)《SNT 2782-2011 原油中盐含量的测定 电测法》.pptx
- 深度解析(2026)《SNT 3016-2011 石脑油中汞含量测定 冷原子吸收光谱法》.pptx
- 深度解析(2026)《ISOTS 19567-12016 Photography — Digital cameras — Texture reproduction measurements — Part 1 Freque标准解读.pptx
- 深度解析(2026)《SNT 3082.5-2012 出口烟花爆竹产品检验规范 第 5 部分:喷花类》.pptx
- 深度解析(2026)《SNT 3086-2012 出境活鳗现场检疫监管规程》.pptx
- 深度解析(2026)《ISOTR 173022015 Nanotechnologies — Framework for identifying vocabulary development for nanotechnol标准解读.pptx
- 深度解析(2026)《SNT 2982-2011 牙鲆弹状病毒病检疫技术规范》.pptx
原创力文档


文档评论(0)