我在网上浏览了具体数学的内容。我至少听说过提到的大部分功能和技巧,但有一整节是关于特殊数字的。这些数字包括斯特林数、欧拉数、谐波数等。现在我从来没有遇到过这些奇怪的数字。它们如何帮助解决计算问题?它们一般用在什么地方?
7 回答
谐波数几乎无处不在!音乐和声,快速排序的分析... 斯特林数(第一类和第二类)出现在各种组合和划分问题中。欧拉数也出现在几个地方,最显着的是在多对数函数的排列和系数中。
你提到的很多数字都用于算法分析。您的代码中可能没有这些数字,但如果您想估计代码运行需要多长时间,您将需要它们。您也可能在代码中看到它们。其中一些数字与组合学有关,计算某事发生的方式有多少。
有时仅仅知道有多少种可能性是不够的,因为您需要列举各种可能性。 Knuth 的 TAOCP 第 4 卷正在进行中,提供了您需要的算法。
这是使用斐波那契数作为数值积分问题的一部分的示例。
谐波数是对数的离散模拟,因此它们出现在差分方程中,就像对数出现在微分方程中一样。这是与谐波数相关的谐波均值的物理应用示例。参见Gamma一书,了解许多谐波数在作用中的示例,尤其是“这是一个谐波世界”一章。
这些特殊数字可以在许多方面帮助解决计算问题。例如:
您想知道计算 2 个数字的 GCD 的程序何时将花费最长的时间:尝试 2 个连续的斐波那契数。
您想粗略估计大量的阶乘,但您的阶乘程序花费的时间太长:使用Stirling's Approximation。
您正在测试素数,但对于某些数字,您总是得到错误的答案:可能是您正在使用费马的素数测试,在这种情况下,卡迈克尔数是您的罪魁祸首。
我能想到的最常见的一般情况是循环。大多数情况下,您使用一种语法类型来指定循环(start;stop;step)
,在这种情况下,可以通过使用所涉及数字的属性来减少执行时间。
例如,当 n 在循环中很大时,将所有从 1 到 n 的数字相加肯定比使用 identity 慢sum = n*(n + 1)/2
。
像这样的例子还有很多。他们中的许多人都在密码学中,信息系统的安全性有时取决于这些技巧。它们还可以帮助您解决性能问题、内存问题,因为当您知道公式时,您可能会找到一种更快/更有效的方法来计算其他事情——您真正关心的事情。
有关更多信息,请查看 wikipedia,或直接尝试 Project Euler。你会很快开始找到模式。
这些数字中的大多数都计算某些类型的离散结构(例如,斯特林数计算子集和循环)。这样的结构,以及因此的这些序列,隐含地出现在算法分析中。
OEIS有一个详尽的列表,列出了 Concrete Math 中出现的几乎所有序列。该列表的简短摘要:
- 哥伦布数列
- 二项式系数
- Rencontres 数字
- 斯特林数字
- 欧拉数
- 超因子
- Genocchi 数字
您可以浏览各个序列的 OEIS 页面,以获取有关这些序列的“属性”的详细信息(尽管不完全是应用程序,如果您最感兴趣的话)。
此外,如果您想了解这些序列在算法分析中的实际用途,请翻阅 Knuth 的计算机编程艺术索引,您会发现许多关于这些序列的“应用”的参考资料。John D. Cook 已经提到了斐波那契数和谐波数的应用;这里还有一些例子:
斯特林循环数出现在寻找数组最大元素的标准算法的分析中(TAOCP Sec. 1.2.10):找到最大值时必须更新当前最大值多少次?事实证明,在元素k
数组中找到最大值时需要更新最大值的概率是。由此,我们可以得出,平均而言,大约需要更新。n
p[n][k] = StirlingCycle[n, k+1]/n!
Log(n)
Genocchi 数的出现与计算“瘦”的BDD的数量有关(TAOCP 7.1.4 练习 174)。
不一定是您提到的参考文献中的幻数,但尽管如此-
0x5f3759df
- 臭名昭著的幻数,用于通过对牛顿的根近似给出良好的初步估计来计算数字的平方根,通常归因于 John Carmack 的工作 -更多信息在这里。
和编程无关吧?:)
这与编程直接相关吗?肯定有关系,但我不知道有多密切。
特殊的数字,例如 e、pi 等,到处都是。我认为没有人会为这两个争论。Golden_ratio也以惊人的频率出现,从艺术到其他特殊数字本身(看看连续斐波那契数之间的比率。)
各种数列和数族也出现在数学的许多地方,因此也出现在编程中。一个美丽的地方是整数序列百科全书。
我会建议这是一个经验的事情。例如,当我在很多很多年前学习线性代数时,我了解了矩阵的特征值和特征向量。我承认,在我看到它们在各种地方使用之前,我根本没有意识到特征值/特征向量的重要性。在统计学中,根据他们告诉您的有关协方差矩阵估计的不确定性、置信椭圆的大小和形状、主成分分析或马尔可夫过程的长期状态。在数值方法中,它们会告诉您方法的收敛性,无论是优化还是 ODE 求解器。在机械工程中,您将它们视为主要应力和应变。