如何有效地计算帕斯卡三角形中的一行?

发布于 2021-01-31 15:56:19

我对找到帕斯卡三角形的第n行(不是特定元素而是整个行本身)感兴趣。什么是最有效的方法?

我考虑了通过汇总上面一行中的相应元素来构造三角形的常规方法:

1 + 2 + .. + n = O(n^2)

另一种方法是使用特定元素的组合公式:

c(n, k) = n! / (k!(n-k)!)

对于该行中的每个元素,我估计前一种方法将花费更多时间,具体取决于计算组合的方式。有任何想法吗?

关注者
0
被浏览
49
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。
    >>> def pascal(n):
    ...   line = [1]
    ...   for k in range(n):
    ...     line.append(line[k] * (n-k) / (k+1))
    ...   return line
    ... 
    >>> pascal(9)
    [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
    

    这使用以下身份:

    C(n,k+1) = C(n,k) * (n-k) / (k+1)
    

    因此,您可以C(n,0) = 1从此开始,然后使用此标识来计算该行的其余部分,每次将前一个元素乘以(n-k) / (k+1)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看