首页 / 知识
关于算法:优秀开发人员应该知道的核心数学概念是什么?
2023-04-14 17:08:00

What are the core mathematical concepts a good developer should know?自从2006年从一所非常小的学校毕业以来,他的课程状况不佳且过时(我是外国人,当时并不知道任何更好的学校)我已经意识到我错过了很多基本概念。 数学和软件视角,主要是其他更高概念的基础。 即 我试着在麻省理工学院的"算法入门"中听取/观看开放课件,但很快意识到我缺少几个数学概念来更好地理解课程。 那么优秀的软件工程师应该知道的核心数学概念是什么? 您推荐我的书籍/网站有哪些? 程序员的数学。好读。 布尔代数是理解控制结构和重构的基础。例如,我看到很多程序员不知道(或不能使用)deMorgan定律导致的错误。作为另一个例子,有多少程序员立即认识到这一点
可以改写为
离散数学和组合学对于理解各种算法和数据结构的性能非常有帮助。 正如Baltimark所提到的,数学归纳在推理循环和递归方面非常有用。 集合论是关系数据库和SQL的基础。 通过类比,我要指出,木匠经常使用各种经验法则来构建屋顶和楼梯等物品。但是,几何知识可以帮助您解决没有"罐装"经验法则的问题。这就像学习通过语音学阅读与基本词汇的视觉识别相比。 90%以上的时间差别不大。但是当你遇到一个不熟悉的情况时,用自己的工具来解决这个问题是非常好的。 最后,无论具体技术如何,数学所需的严谨性/精确性对于编程都是非常有用的准备。再一次,我在职业生涯中看到的编程(甚至规范)中的许多错误都是对其根本原因的粗心思考。 我会选择Landon所说的田地:
并添加数学逻辑。 这将使您掌握CS的大部分领域。如果你想进入特殊领域,你必须潜入某些领域,特别是:
按重要性排序:
比这更先进的东西通常是特定于算法或特定于域的。根据您感兴趣的领域,以下内容也可能相关:
理解函数也很有用(不记得该区域的数学术语是什么),但如果你知道如何编程,你可能已经做过了。 我的观点是:一个十岁的孩子应该知道足够的数学能够理解编程。基本理解事物所需的数学并不多。这真的是关于逻辑的。 "归纳证明"是程序员知道的核心数学概念。 一般算法分析中的大O符号,与标准集合(排序,检索插入和删除)有关 对于离散数学,这里有来自Arsdigita大学的20个讲座。每个约一小时二十分钟。 从我们CS人称之为"离散数学"的东西开始。微积分和线性代数也可以派上用场,因为它们可以帮助您进入许多应用领域。一旦你掌握了这三个,就去概率论了。这4个将使你获得95%(我做到了)应用领域的能力。 具体数学涵盖了大多数主要议题。关于离散数学的好书,如罗森的离散数学及其应用,将填补任何空白。 我认为这取决于你的重点。几年前,我购买了Donald Knuth的计算机程序设计艺术。看完书后,我意识到一切都是微积分证明。如果您有兴趣为它们开发自己的通用算法和证明,那么我建议您能够理解上述书籍,因为它是您在该世界中所处理的内容。另一方面,如果你只想要/需要使用各种排序/搜索/树/等...例程,那么最大的O符号,布尔数学和一般代数都可以。如果你正在处理3D,那么几何和trig也是如此。 我倾向于更多地使用侧面而不是制作样张,而且我想我多年来做过一些聪明的事情,我从来没有坐下来开发新的排序程序。我能给出的最好的建议就是了解你所在领域需要什么,但要让自己暴露在更高层次,以便你知道它存在以及需要学习多少,否则你将无法获得更多的成长。
我会说布尔逻辑。 AND,OR,XOR,NOT。 基础代数和统计学是很好的起点,也是很多其他领域的基础。
当我看到不了解它的开发人员时,这是一个让我感到困惑的简单: "计算机程序设计的艺术"第1章旨在提供这一点。
刷新数学的网站: 回到学校,我的导师说,对于商业应用程序,所有你需要知道的是加法,减法,乘法和除法。请求者将知道的所有其他公式并告知您需要什么。现在意识到这是用于融资报告和以应用为重点的学校。直到今天,这对我来说也是如此。我从来不需要知道更多。
查看"计算机科学基础"一书 这就是作者在他们的前言中所说的关于本书目标的内容:
"计算机科学基础涵盖经常被发现的科目 有一本书被推荐......标题就像混凝土数学。在几个问题中建议使用它。 那么,这取决于你的目标是什么。正如有人所说,线性代数,组合,概率和统计与图论是重要的,如果你要解决难题。函数的渐近增长(bit-Oh表示法)非常重要。如果您需要分析一些更复杂的算法,还需要掌握求和和序列(请参阅Cormen附录和其他算法简介)。 即使你是"企业的Java"或"服务器端的PHP",你会发现一些统计和算法复杂性(因此组合,归纳,求和,系列等)在你的老板希望你获得服务器时很有用更快地工作,添加新硬件似乎没有帮助。 :-)我曾经历过那一次。
离散数学
为什么包括概率和统计数据在内的每个人都没有提到微积分?如果没有极限,衍生物,积分和系列的工作知识,人们无法理解概率和统计是什么。总而言之,微积分(与线性代数一起)是所有数学的主力。 我认为算法和理论非常重要。能够提出快速,正确的解决方案是优秀程序员与其他人的区别所在。此外,能够证明您的算法(使用标准证明技术 - 归纳,矛盾等)同样重要。 是的,我会说对归纳的基本理解有助于您理解n在算法中代表什么。一些逻辑和离散结构也很有用。 如果你不得不做任何类似机器学习的事情,概率和统计是非常有用的。 我在"计算你的技能"博客文章中介绍了基础知识,我将讨论Xbox Live的TrueSkill排名和配对算法的工作原理。 我的数学背景非常差(地质学家通过培训),但我在高中学习了一个独立的数学课,我每天都把这些概念用作程序员。这可能是我在我所有的教育中最有价值的课程,因为它与我目前的专业有关。
|
最新内容
相关内容
linux核心命令实战?
linux核心命令实战?,系统,基础,地址,基础知识,工作,实战,数字,管理,网络,时间,linux运维工程师推荐看什么书如果你想要学习Linux,强烈建议通过Python3实现旋转数组的3种算法
Python3实现旋转数组的3种算法,位置,代码,时间,培训,算法,数组,解法,结果,长度,索引,下面是Python3实现的旋转数组的3种算法。一、题目给定一Python算法是什么?有哪几类?
Python算法是什么?有哪几类?,数据,数字,时间,算法,系统,策略,位置,有限,标准,培训,了解Python的人应该都听说过Python算法,但是它们的类型和定义为什么开发人员喜欢在机器学习和人
为什么开发人员喜欢在机器学习和人工智能项目中使用Python?,代码,项目,数据,人工智能,平台,异常,增长,灵活,时间,工具,1.Python是灵活的PythoWeb开发人员推荐的Python框架
Web开发人员推荐的Python框架,系统,公司,灵活,时间,项目,软件,框架,认证,管理,异常,您可以在没有框架的情况下创建出色的应用程序。如果您正数据科学中必须了解的Python核心库
数据科学中必须了解的Python核心库,数据,生产,代码,标准,分析,培训,图片,工具,统一,涉足,python有三个核心数据科学库,在此基础上还创建了许多Python编程中3个常用的数据结构和
Python编程中3个常用的数据结构和算法,代码,电话号码,销售额,有限,情况,分解,异常,名称,平均,位置,python内置了许多非常有用的数据结构,比如开发人员常用Python开发工具
开发人员常用Python开发工具,环境,代码,平台,设备,项目,分析,智能,行业,产品,人员,Python编程开发是目前最热门的行业之一,Python无论是从人才Python机器学习之AdaBoost算法
Python机器学习之AdaBoost算法,数据,综合,失衡,时间,培训,算法,样本,权重,模型,机器,算法概述AdaBoost是英文AdaptiveBoosting(自适应增强)的Python算法定义
Python算法定义,有限,时间,数据,算法,情况,培训,系统,策略,复杂度,步骤,算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的python RSA加密算法过程
python RSA加密算法过程,数据,工作,公开,指数,第一,公式,基础,时间,培训,因子,1,随机选取两个质数p和q2,计算n=pq3,选取一个与Ø(n)互质的小奇数Python 决策树算法思想
Python 决策树算法思想,标准,数据,节点,量化,技术,衍生,信息,连续,培训,叶子,决策树(decisiontree)是一个树结构(可以是二叉树或者非二叉树)