Advertisement

[算法][动态规划]用于计算组合与排列

阅读量:

1.公式法

公式法是计算过程中最为直接的实现方式,具体如下所示:

  • 组合数:C_n^m=\frac{n!}{m!(n-m)!}
  • 排列数:A_n^m=\frac{n!}{(n-m)!} (亦可表示为P_n^m)

可以明显看出,两者之间存在转换关系:C_n^m=\frac{A_n^m}{m!},同时组合数还满足以下等式:C_n^m=C_n^{n-m}

相应的公式法对应的编程实现代码如下:

复制代码
    def C(n, m):  # O(M)
    res = base = 1
    for x in range(m):
        res *= (n - x)
        base *= (x + 1)
    return res // base
    
    def P(n, m):  # O(M)
    res = 1
    for x in range(m):
        res *= (n - x)
    return res
    
    
      
      
      
      
      
      
      
      
      
      
      
      
    

然而,需要指出的是,采用该方式在计算C与P时,无法一次性批量

全部评论 (0)

还没有任何评论哟~