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