倒置乘法金字塔

时间:2015-02-05 22:45:48

标签: algorithm time-complexity

我有倒金字塔。在顶部有从1到 N 的数字。 下面,我们写出( N - 1)数字,每个数字都是它上面两个数字的乘积。等等每一行。

例如( n = 4):

1       2       3       4
    2       6      12
       12      72
          864

我必须找到最终号码的第一个数字。这可以在O( N )中完成吗?也许有一个特定的算法?

1 个答案:

答案 0 :(得分:2)

首先让我们看看因素

1¹         2¹         3¹         4¹
    1¹⋅2¹      2¹⋅3¹      3¹⋅4¹
       1¹⋅2²⋅3¹    2¹⋅3²⋅4¹
            1¹⋅2³⋅3³⋅4¹

如果你看一下指数,就会看到帕斯卡三角形。

因此乘法金字塔的最后一个元素的公式是

pn = Πk=1,...,n nbinom(n-1,k-1)

现在你只有"必须得到结果的第一个数字dn。你可以通过计算

来做到这一点
dn = floor( pn / 10floor( log10(pn) ) )
   = floor( 10log10(pn) / 10floor( log10(pn) ) )
   = floor( 10log10(pn) - floor( log10(pn) ) )

为了避免巨大数字,您可以直接通过

计算log(pn)
log(pn) = Σk=1,...,n binom(n-1,k-1)⋅log(k)

示例:

d₄ = floor( 10log₁₀(864) - floor( log₁₀(864) ) ) 
   = floor( 102.936513742 - 2 )
   = floor( 100.936513742)
   = floor( 8.64 )
   = 8

要计算log(pn),您必须进行n次乘法和n-1次加法。在此之后,您只需计算一定数量的操作,因此这将在O(n)

中运行