【问题标题】:Computing number of permutations of two values, with a restriction on runs计算两个值的排列数,并限制运行
【发布时间】:2010-09-02 14:58:13
【问题描述】:

我正在考虑解决this other question about counting the number of values whose digits sum to a target 的方法,并决定尝试范围为[0, n^base) 形式的情况。所以基本上你得到了 N 个独立的数字来处理,这是一个更简单的问题。

N 个自然数与目标 T 相加的方式数很容易计算。如果您将其视为在 T 根棍子之间放置 N-1 个分隔线,您应该会看到答案是 (T+N-1)!/(T!(N-1)!)。

但是,我们的 N 个自然数被限制为 [0, base),因此可能性会更少。我也想为这种情况找到一个简单的公式。

我考虑的第一件事是减去“基”被替换为“大棒”的可能性的数量。不幸的是,有些可能性被重复计算了,因为它们有多个地方可以插入“大棒”。

有什么想法吗?

【问题讨论】:

标签: algorithm math combinatorics


【解决方案1】:

您可以使用生成函数。

假设顺序很重要,那么您正在寻找x^T in 的系数

(1 + x + x^2 + ... + x^b)(1 + x + x^2 + .. + x^b) ... n times

 = (x^(b+1) - 1)^n/(x-1)^n

使用二项式定理(甚至适用于 -n),您应该能够将您的答案写为二项式系数的乘积之和。

设 b+1 = B。

使用二项式定理我们有

(x^(b+1) - 1)^n = Sum_{r=0}^{n} (-1)^(n-r)* (n choose r) x^(Br)

1/(x-1)^n = Sum (n+s-1 choose s) x^s

所以我们需要的答案是:

Sum (-1)^(n-r) * (n choose r)*(n+s-1 choose s)

对于任何符合条件的 r 和 s

Br + s = T.

【讨论】:

  • 聪明。 Br 是指 B*r 吗?还有,你有没有漏掉 1/(x-1)^n = Sum (n+s-1 choose s) x^s 右边的 1/?
  • @Strilanc:是的,Br = B*r。不,那是右边的无穷级数,类似于 1/(1-x) = 1 + x + x^2 + ....
猜你喜欢
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
相关资源
最近更新 更多