使用具体数学中提到的“特殊号码”在哪里?

时间:2009-05-23 15:40:14

标签: math computer-science numbers discrete-mathematics

我在网上浏览了混凝土数学的内容。我至少听过提到的大部分功能和技巧,但有一个关于特殊号码的部分。这些数字包括斯特林数,欧拉数,调和数等。现在我从未遇到任何这些奇怪的数字。他们如何帮助解决计算问题?他们通常在哪里使用?

7 个答案:

答案 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 中的序列。该列表的简短摘要:

  • Golomb的序列
  • 二项式系数
  • Rencontres Numbers
  • 斯特林号码
  • 欧拉数字
  • Hyperfactorials
  • Genocchi Numbers

您可以浏览相应序列的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)