我有一个游戏,一个玩家X想要将球传给玩家Y,但他可以玩多个玩家而其他玩家可以将球传给Y.
我想知道球从X到Y有多少不同的路径?
例如,如果他正在玩3个玩家,则有5个不同的路径,4个玩家16个路径,如果他正在玩20个玩家,则有330665665962404000个路径,以及40个玩家55447192200369381342665835466328897344361743780该球可以采取。 最大数量他可以玩的球员是500。我在考虑使用加泰罗尼亚数字?你认为解决这个问题的方法是否正确? 你能给我一些提示吗?
答案 0 :(得分:4)
乍一看,我想说,可以通过以下方式计算出许多可能的路径(我假设“路径”是一系列没有玩家出现多次的玩家)。
如果您与n+2
玩家一起玩,即玩家X,玩家Y和n
其他可能出现在路径中的玩家。
然后路径可以包含0
,1
,2
,3
,...,n-1
或n
“中间”玩家X(开始)和玩家Y(结束)之间的玩家。
如果您从k
玩家中选择1 <= k <= n
(n
)名玩家,则可以(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上。
我假设您将尝试找到球可以采取的最佳路线,在这种情况下,我会考虑查看不关心路线中节点数量的算法。