Pascal的非独特集定理?

时间:2008-09-19 16:49:44

标签: math

当集合包含唯一实体时,

Pascal's rule计算集合的子集非常有效。

当该集合包含重复项目时,是否对此规则进行了修改?

例如,当我试图找到字母A,B,C,D组合的计数时,很容易看出它是1 + 4 + 6 + 4 + 1(来自Pascal的三角形)= 16,如果我删除“不使用任何字母”条目,则为15。

现在,如果字母组是A,B,B,B,C,C,D怎么办?手动计算,我可以确定子集的总和是:1 + 4 + 8 + 11 + 11 + 8 + 4 + 1 = 48,但这不符合我所知的三角形。

问题:如何修改Pascal的三角形以考虑集合中的重复实体?

6 个答案:

答案 0 :(得分:4)

一组只包含唯一的项目。如果有重复项,那么它就不再是一个集合。

答案 1 :(得分:4)

是的,如果您不想考虑集合,请考虑“因素”的概念。有多少因素:

p1^a1.p2^a2....pn^an

如果p1是不同的素数。如果ai都是1,那么数字是2 ^ n。一般来说,答案是(a1 + 1)(a2 + 1)...(an + 1),正如David Nehme所说。

哦,请注意你的答案是错误的,如果你不想算空集,它应该是48或47。

答案 2 :(得分:4)

看起来你想知道有多少个子集具有3个元素。对此的数学计算非常棘手,非常快。我们的想法是,您希望将所有组合方式加在一起。所以你有C(3,4)= 4种方法,没有重复的元素。 B可以以C(1,3)= 3种方式重复两次。 B可以1次重复3次。并且C可以以C(1,3)= 3种方式重复两次。总共11个。 (你手边拿到的10个是错的。抱歉。)

一般来说,尝试做那种逻辑太难了。跟踪它的更简单方法是写出一个多项式,其系数具有您想要乘以的项。对于Pascal的三角形,这很容易,多项式是(1 + x)^ n。 (您可以使用重复的平方来更有效地计算它。)在您的情况下,如果元素重复两次,您将得到(1 + x + x ^ 2)因子。 3次将是(1 + x + x ^ 2 + x ^ 3)。所以你的具体问题将解决如下:

(1 + x) (1 + x + x^2 + x^3) (1 + x + x^2) (1 + x)
  = (1 + 2x + 2x^2 + 2x^3 + x^4)(1 + 2x + 2x^2 + x^3)
  = 1    + 2x   + 2x^2 +  x^3 +
    2x   + 4x^2 + 4x^3 + 2x^4 +
    2x^2 + 4x^3 + 4x^4 + 2x^5 +
    2x^3 + 4x^4 + 4x^5 + 2x^6 +
    x^4  + 2x^5 + 2x^6 +  x^7
  = 1 + 4x + 8x^2 + 11x^3 + 11x^4 + 8x^5 + 4x^6 + x^7

如果你想在代码中产生这些数字,我会使用多项式技巧来组织你的思考和代码。 (你将使用系数数组。)

答案 3 :(得分:2)

根本不需要修改Pascal的三角形。研究C(k,n),你会发现 - 你基本上需要将原始结果除以相当于字母的排列。

例如,A B1 B2 C1 D1 == A B2 B1 C1 D1,因此您需要将C(5,5)除以C(2,2)。

答案 4 :(得分:1)

没有重复(在早期海报中注明的集合中),每个元素都在子集内或外。所以你有2 ^ n个子集。对于重复项(在“多组”中),您必须考虑每个元素在“子多组”中的次数。如果m_1,m_2 ... m_n表示每个元素重复的次数,那么子包的数量是(1 + m_1)*(1 + m_2)* ...(1 + m_n)。

答案 5 :(得分:0)

即使数学集确实包含唯一项,但在编程的真实世界中,您可能会遇到“集合”中重复项的问题。有关示例,请参阅Lisp联盟的this thread