Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 找到与数据一致的a分数的所有可能组合_Algorithm_Combinations_Puzzle_Combinatorics_Pascals Triangle - Fatal编程技术网

Algorithm 找到与数据一致的a分数的所有可能组合

Algorithm 找到与数据一致的a分数的所有可能组合,algorithm,combinations,puzzle,combinatorics,pascals-triangle,Algorithm,Combinations,Puzzle,Combinatorics,Pascals Triangle,所以我在业余时间一直在解决一个问题,我被卡住了。这就是我的目的。我有一个40号。它代表球员。我得到了其他号码39,38。。。。10这代表了前30名球员(1-30)的得分。其余球员(31-40)的得分未知。我想做的是找出有多少分数组合与给定数据一致 举个简单的例子:如果你有3个玩家。一个得1分。然后,分数的可能组合数为3(0,2;2,0;1,1),其中(a,b)分别代表玩家1和玩家2的获胜次数。(3,0)的组合不起作用,因为没有人能赢3场。(0,0)也不起作用,因为我们总共需要3场胜利(并且用0,

所以我在业余时间一直在解决一个问题,我被卡住了。这就是我的目的。我有一个40号。它代表球员。我得到了其他号码39,38。。。。10这代表了前30名球员(1-30)的得分。其余球员(31-40)的得分未知。我想做的是找出有多少分数组合与给定数据一致

举个简单的例子:如果你有3个玩家。一个得1分。然后,分数的可能组合数为3(0,2;2,0;1,1),其中(a,b)分别代表玩家1和玩家2的获胜次数。(3,0)的组合不起作用,因为没有人能赢3场。(0,0)也不起作用,因为我们总共需要3场胜利(并且用0,0也得不到)

我已经找到了可能的游戏总数。这是玩过的游戏总数,这意味着它是赢的总数。(没有平局。)最后,我有一个每个玩家的最大赢家变量(比玩家总数少一个。没有一个玩家可以拥有更多。)

我试着通过将N个胜利分散给每个玩家,然后减去不符合标准的组合,来找到唯一组合的数量。例如,要找出多种方法让5个人获得10次胜利,而每个人不超过4次胜利,您可以使用: C(14,4)-C(5,1)*C(9,4)+C(5,2)*C(4,4)=381。C(14,4)来自公式C(n+k-1,k-1)(我相信是谷歌条带)。下一步是从5中剔除(不允许),但把我们减去两次的那个加起来

是的,一定有更简单的方法。最后,数字变得如此之大,以至于我不确定我的计算机是否能够充分处理它们。我们说的是C(780,39),它是1.15495183×10^66。无论如何,应该有更好的方法来做到这一点

总而言之,你有40个人。前30人的得分是10比39。最后十个人的分数不详。您可以生成多少符合标准的分数:所有分数加起来等于可能的总赢款,每个玩家最多只能获得39场赢款

想法

生成函数: 因为这个问题更多的是关于数学的,但仍然在编程QA网站上,让我给你一个部分解决方案,它使用符号代数(比如Mathematica的Maple)来解决这些问题。我强烈建议你抓起一本组合学入门书,这些问题都在那里得到了解答

首先,前30名得分为10-39(总分为735)的球员有点像是在转移注意力——我们想做的是解决另一个问题,剩下的10名球员的得分可能在(0…39)范围内

如果我们认为球员的可能得分是多项式:

f(x) = x^0 + x^1 + x^2 + ... x^39

其中x^ 2的值是2的分数,例如,考虑这看起来像

f(x)^10    
这代表了所有10名球员的综合得分,即
x^385
的系数为2002,这表示10名球员有2002种得分方式385分。Wolfram Alpha(编程语言IMO)

如果您想知道有多少种可能的方法可以这样做,只需在表达式8140406085191601中替换为
x=1
,正好是39^10(毫不奇怪!)

这为什么有用? 虽然我知道,对一些人来说,为一个可以在纸上解决的简单问题设置所有这些机制似乎很愚蠢,但当问题变得混乱时(渐近分析是可能的),这种方法是有用的。考虑同样的问题,但是现在我们限制球员只得分质数(2,3,5,7,11,…)。有多少种可能的方法可以让他们中的10人获得一个特定的分数,比如344分?只需修改您的
f(x)


重复这个过程!(
[x^344]f(x)^10=1390
)。

请具体一点。数字10到40代表实际分数吗?你所说的“有多少排列与给定数据一致”是什么意思?另外,输赢如何与这个问题联系在一起?你能举一些不起作用的排列的例子吗?计算机能处理惊人的大量数据。查看您的潜在数据类型范围(长、双等)。如果你想计算简单的排列,请使用阶乘:@钩住了几个问题:(1)如果有,你会推荐什么样的组合学入门书供自学。(2) 对于这句话中的“this”是指什么,我有点困惑-如果你想知道有多少种可能的方法可以做到这一点,就用x=1来代替…“@Hooked(3)我不明白这句话的意思:这代表了所有10名玩家的综合得分,也就是说,x^385的系数是2002,这代表了一个事实,即10名玩家在2002年有办法获得385分。”(4)你为什么选择385分?@user678392(1)见Wilf的免费电子书:generatingfunctionology()(2)“这”是10名玩家可以得分的可能方式的数量,即它统计所有可能的组合。(4) 我选择385作为示例,只是为了说明该方法。(3) is需要了解GF(渴望评论),请查看Wilf的书并在我们的数学网站()上提出简单的GF问题。
f(x) = x^2 + x^3 + x^5 + x^7 + x^11 ...