查找不同路径的数量

时间:2010-05-28 13:15:00

标签: combinatorics

我有一个游戏,一个玩家X想要将球传给玩家Y,但他可以玩多个玩家而其他玩家可以将球传给Y.

我想知道球从X到Y有多少不同的路径?

例如,如果他正在玩3个玩家,则有5个不同的路径,4个玩家16个路径,如果他正在玩20个玩家,则有330665665962404000个路径,以及40个玩家55447192200369381342665835466328897344361743780该球可以采取。 最大数量他可以玩的球员是500。

我在考虑使用加泰罗尼亚数字?你认为解决这个问题的方法是否正确? 你能给我一些提示吗?

5 个答案:

答案 0 :(得分:4)

乍一看,我想说,可以通过以下方式计算出许多可能的路径(我假设“路径”是一系列没有玩家出现多次的玩家)。

如果您与n+2玩家一起玩,即玩家X,玩家Y和n其他可能出现在路径中的玩家。

然后路径可以包含0123,...,n-1n“中间”玩家X(开始)和玩家Y(结束)之间的玩家。

如果您从k玩家中选择1 <= k <= nn)名玩家,则可以(n choose k)方式执行此操作。

对于每个中级球员子集,有k!个可能的球员安排。

所以这会产生sum(i=0 to n: (n choose i) * i!)

为了“更好”的阅读:

---- n     / n \           ---- n      n!            ---- n      1
\          |   |           \        --------         \         ------
/          |   | * i!   =  /         (n-i)!   =  n!  /           i!
---- i=0   \ i /           ---- i=0                  ---- i=0

但我认为这些不是加泰罗尼亚语。

答案 1 :(得分:1)

这在组合学中确实是一个问题,而不是算法。

将从玩家X到玩家Y的不同路径的数量标记为F(n),其中n是包括Y但不包括X的玩家数量。 现在,有多少不同的路径?球员X可以直接将球传给Y(1选项),或者传递给其中一个球员(n-1选项)。如果X传递给另一个玩家,我们可以假装该玩家是新的X,其中场上有n-1个玩家(因为'老'X不再在游戏中)。这就是为什么 F(n)= 1 +(n-1)F(n-1) 和 F(1)= 1

我很确定你可以从这个问题达到phimuemue的答案。问题是你是否更喜欢递归解决方案或者是求和的解决方案。

答案 2 :(得分:0)

我在这种搜索方面有点像菜鸟,但快速浏览数字表明你可以修剪,剪切,过滤掉的越多,你做得越快。你引用的数字很大。

首先想到的是“限制搜索深度是否切合实际?”如果您可以将搜索深度限制为4(任意数字),那么最坏情况下的可能性就会出现......

499 * 498 * 497 * 496  = 61,258,725,024  (assuming no one gets the ball twice)

这仍然很大,但是对于游戏而言,详尽的搜索速度会比原始数据集快得多(

)。

我相信在这方面有更多经验的人会有更好的建议。不过,我希望这会有所帮助。

答案 3 :(得分:0)

如果X需要传递给Y,并且可能有P1,P2,......,Pn玩家介于两者之间并且你关心传球的顺序那么确实

对于2个额外的玩家,你有路径:X-Y,X-P1-Y,X-P2-Y,X-P1-P2-Y,X-P2-P1-Y

总共提供了5种不同的路径,类似于3个额外的玩家,你有16种不同的路径

首先尝试将问题简化为已知的问题,为此我将消除XY,它们对于上述所有转换都是常见的问题:从0到n的k的k-置换的总和是什么,其中n是P的数量。

这可以作为

给出
f(n):=sum(n!/(n-i)!,i,0,n);

我可以确认你的发现19和39(你的符号为20和40)。

对于f(499)我得到了

6633351524650661171514504385285373341733228850724648887634920376333901210587244906195903313708894273811624288449277006968181762616943058027258258920058014768423359811679381900054568501151839849768338994244697593758840394106353734267539926205845992860165295957099385939316593862710470512043836452624452665801937754479602741031832540175306674471495745716725509714798824661807396000105338256698426305553340786519843729411660457896089840381658295930455362209587765698327585913037665131195504013431486823990271059962837959407778393078276213331859189770016153265512805722812864376997337140529242894215031131618375899072989922780132488077015246576266246551484603286735418485007674249207286921801779414240854077425752351919182464902664206622037834736215298295580945851569079682952183639701057397376328170754187008425429164206646365285647875545882646729176997107332605851460212415526607757545366695048460341802079614840254694664267117469603856584752270653889630424848913719533359942725361985274851471687885265903663806182184272555073708882789845441094009797907518245726494471433964169680271980763830020431957658400573531564215436064984091520

使用wxMaxima

获得的结果

答案 4 :(得分:-1)

编辑:经过对问题评论的更多澄清,我的答案绝对无用:)他绝对想要可能的路线数量,而不是最好的路线!


我的第一个想法是你为什么想知道这些数字?你肯定永远不会遍历500人可用的所有路径(需要太长时间)而且它太大而无法以任何有意义的方式显示在ui上。

我假设您将尝试找到球可以采取的最佳路线,在这种情况下,我会考虑查看不关心路线中节点数量的算法。

我会尝试查看A star algorithmDijkstra's algorithm