编程需要了解哪些良好的数学公式?[关闭]


19

您学到了哪些通用数学公式,这些公式可以帮助您编写更好的算法并成为更好的程序员?

示例:我了解了ecludian距离公式:sqrt((x1-x2)^2+(y1-y2)^2)通过比较两个因素,它帮助我了解了如何找到相似的物体。


2
我认为这不是欧几里得距离公式。
格雷格·休吉尔

@Larry @Greg编辑。
GSto

哈哈
fibo

1
完成日期=(预计日期+剩余天数/ 2)^(工作时间/在家时间)*免费比萨饼的数量
Skizz 2010年

7
如果您只需要比较距离,则可以跳过该sqrt步骤,这可能会很有意思。对于紧密的内部循环,这可能很重要。

Answers:


16

知道2的幂很容易,尤其是在处理低级按位运算时。


+1-必须能够与基准2、16、10和8进行转换。
mouviciel

2
我不确定以8为基数,但是我同意2、16和10的转换。您应该有能力在合理的时间内完成任务,但不一定要立即执行。
隐身于2010年

我的一位老师是六角动物。转换了他可笑的数字,我成为他的助教长达一年左右,这班课总是给我留下深刻的印象
克里斯

我讨厌基地8 :)

1
随着宏,枚举和位域在现代语言,在什么情况下人们需要知道的2的幂,这是从根本上幻数.. setsockopt(...SO_KEEPALIVE..)更容易了很多读取或写入比setsockopt(...16...)
JBRWilkinson

15

已经提到了布尔代数,但是我想提供一些实际的例子。

当您使用复杂的布尔表达式(if例如在语句中)时,布尔代数非常有用。

结合有用的表达方式和规律:

分布性

A&(B | C)=(A&B)| (A&C)

A | (B&C)=(A | B)&(A | C)

所以下一次您偶然发现这样的表达:

if((A || B) && (A || C) && (A || D) && (A || E)) { ... }

您可以轻松地将其缩小为:

if(A || (B && C && D && E)) { ... }

否定与德摩根定律

!(!A)= A

!(A&B)=!A | !B

!(A | B)=!A&!B

假设您有这样的陈述:

if(!A && !B && !C) {..}

而您需要构建相反的东西。写作:

if(!(!A && !B && !C)) {...}

可以工作,但看起来不像这样等效:

if(A | B | C) {...}

2
这样做的问题是,这是否是真实的实际业务规则,因为那些规则可能会发生变化。如果是这样,则需要重建原始表达式以对其进行更改,然后再次对其进行优化。维护人员在这样做时会发牢骚。

这就是卡诺地图可以提供帮助的地方。它一次最多只能对4个布尔值标志有效,但是如果您需要更多-祝您好运!
工作

3
+1为摩根定律。令我惊讶的是,似乎没有多少人被教过并且知道如何应用它。
Fortyrunner,2010年

您忘记了这个:(P -> Q) <=> (!P | Q)。我一直使用它,因为很少有环境提供逻辑蕴涵运算符,这对于SQL CHECK约束非常方便。
亩太短了,

卡诺和德​​摩根定律通常会教您在电气工程课程中使用,而不是在计算机工程课程中使用。这很奇怪,因为可以在后者中找到应用,就像上面提到的De Morgan定律的实际使用一样。
Spoike 2011年

9

以我的经验,数学公式用于非常具体的计算,可能适用于您的项目,也可能不适用于您的项目。

如果您需要计算某些东西,通常在库或示例源代码中都会有一个函数可以为您计算出来。例如,Excel的PMT()函数计算在Y期间以X%偿还债务所需的付款。您是否真的想知道它是如何计算的,或者仅调用内置函数就足够了吗?

在过去的十年中,我认为除了Ceil(),Min()和Max()之外,我不需要使用数学库中的任何东西,这表明即使计算机是为解决基于数学的问题而设计的,当今的普遍用途是围绕数据流进行决策。

以Facebook为例,它具有大量的代码。某处可能有一些数学运算,但我怀疑主要是在Crypto API中,它可能是一个系统库。但是数据库访问,授权决策,页面构建和信息路由可能不会使用大量的Math。

是的,有些市场需要大量数学-金融,物理学,工程学-但是在这些行业中,您的主要学科是数学/经济学,物理学,工程学等,因此您的问题是“我怎么写”语言Y中的公式f(x)?

IMO可以更好地利用您的时间来研究算法(包括Big O表示法)和设计模式。


1
+1是因为这似乎是一条合理的语句-您不需要知道特定的公式,但是算法复杂性(大O表示法)的概念非常重要。
Michael H.

大量的数学运算法则...决定使用哪些广告来困扰您。

我确实同意所需的数学运算量通常很低,尽管我的经验并不像您的经验那么低-我最终会在图形中定期使用三角函数。
罗伦·佩希特尔

7

没有公式可以使您成为更好的程序员。

与数学相关的技能可以使您成为更好的程序员:

  • 科学方法 -数学/科学思维方式和解决问题的方法
  • 抽象 -识别抽象和模式的能力
  • 继承 -在解决新问题中重用现有工作/方法
  • 经验 -了解一系列问题和解决方案

-1,该男子询问有用的数学公式。我简直不敢相信这个答案。
Jas


6

我想提到泰勒级数,它对于快速获得“较重”功能非常有用。例如sin(x),可以用近似0 x-(x*x*x/6)

总的来说,有一种聪明的方法可以快速地近似事物,而不是将其计算到最后一个有效数字(尽管对于基本函数,大多数现代处理器都包含快速的硬连线实现,因此使用泰勒近似正弦可能并不那么重要)。速度增益)。


3

德摩根定律,关于相对于否定值转换布尔“和”和“或”,以及一些有关布尔逻辑(如双重否定)的基本知识。


2

三法则(交叉乘法的类型)

+1用于基本统计公式。

我看到许多人都难以在基本代码上应用此简单规则。


+1用于交叉乘法。在某些容易出现整数溢出问题的软件中,使用交叉乘法来检查结果是否不会溢出。
rwong

2
没什么大不了的。这应该根植在希望学习CS的高中毕业生的头上。
工作

@Job:在理论世界中,这是真的!
Pagotti,2011年


2

余弦定律对于许多几何问题非常重要,

替代文字

特别是角度确定。


那等式中的伽马是多少?
马特·艾伦

1
@马特·艾伦(Matt Ellen):C侧的角度(IOW,A和B之间的角度)
Lie Ryan

2
当然,还有直角三角形的特殊情况:a^2 + b^2 = c^2
注意

2

编程是一个非常广阔的领域。数学公式取决于您所位于的编程领域。如果您喜欢图形,游戏编程,则需要了解更多的三角学和几何学。游戏编程可以进一步分类为物理,渲染,着色器等领域。因此,如果您是物理模拟专家,那么您应该了解与物理相关的知识。
如果您喜欢安全性,那么您必须是数论专家。
通常,您可以将这些结合使用,无论您感兴趣的是哪种。学习永无伤害。



2

T(n)= aT(n / b)+ f(n),a> = 1,b> 1

掌握定理对于编程非常了解。它使您能够解决递归关系,从而可以帮助您找到递归算法的复杂性。在编写“分而治之”样式算法时,这一点尤其重要。粗略地说,如果您知道每个“步骤”的复杂性和分支因子,则可以使用主定理来获得复杂性。


1
为什么对编程要了解呢?
马特·艾伦

@MattEllen:它可以让您解决递归关系,从而可以帮助您找到递归算法的复杂性。在编写“分而治之”样式算法时,这一点尤其重要。粗略地说,如果您知道每个“步骤”的复杂性和分支因子,则可以使用主定理来获得复杂性。
蒂洪·耶维斯

1
  • 代数
  • 三角学
  • 向量(矩阵运算)
  • 结石
  • [各种插值及其导数]
  • [表面,NURBS]

(括号中的那些更像是“应用”类型的)

由于它很大程度上取决于您所在的领域,因此很难给出一般的指导。但是以上内容涵盖了许多工程学位的基础。请注意,这些类别通常会重叠(三角函数+矩阵运算,演算+矩阵运算,依此类推。)。

我附近总是有一本数学手册。人们通常不确定某件事,并且有助于以一种有组织的方式展示它。


1

知道布尔代数很有帮助。它使您不必编写类似

if (x < 10)
    return true;
else
    return false;

我不太确定我了解布尔代数如何防止用户写这些东西?您能建议用户在此处写些什么吗?(我会假设return x <10;但可能会误会。)
克里斯(Chris

1
您是正确的-应该返回x <10。这样想吧。评估(x <10)将返回布尔值结果。然后if语句分解为[if x确实小于10] if(true)返回true; 或[如果x大于或等于10] if(false)...否则返回false;否则返回false。
埃里克·奥尔森

2
(x <10)可能将两个业务案例分开。使用冗长的表格,您不仅可以返回值,还可以做更多的事情,这在维护模式下非常好,因为您可以将更改保持在最低限度

1

对于优化问题,最好了解对数可能性。例如,如果您尝试最小化平方和,则与最大化似然对数相同,因为(大致而言)

log( Product( exp( -(x[i]-mean)^2 )) )
  =
  - Sum( (x[i]-mean)^2 )

性能调整领域中的其他收藏夹是二项式和Beta分布。它们非常容易计算。

如果您从程序状态中抽取10个随机时间样本,并且在一定条件下(对于F = 40%的时间)处于某种状态,则就像使用不公平硬币进行抛硬币实验一样。在这种情况下,您看到它的次数是平均数为10 * 0.4 = 4的二项分布,并且sqrt(10 * 0.4 * 0.6)= sqrt(2.4)= 1.55的标准偏差。

另一方面,如果您抽取10个样本,并且碰巧在4个样本的条件下看到它,那告诉您关于F有多大?可能的结果是0、1、2、3、4,...,9、10。这是11种可能性,您看到的可能性(4)是第五种。因此,取11个均匀(0,1)随机数,并对它们进行排序。第五个分布是F的分布,即Beta分布。它的模式是4/10。平均为5/11。其方差为5 * 6 /(11 ^ 2 * 12)= 0.021,标准偏差= 0.144。

许多人认为需要大量样本来定位软件性能问题并避免发现错误的样本。这些分布表明,少量样本可以揭示很多有关其成本的信息。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.