组合排列群



我正在开发一个棋盘游戏的概率分析程序。作为算法的一部分,我需要计算一个数字的分区的可能排列(加上一些填充),以便所有分区组件不能占据任何位置,该位置低于排列的总长度(以数字为单位)减去该组件的值。

(然而,将被分割的数字永远不可能高于8,排列的长度永远不可能超过7。)


例如,假设我的分区为4,"211",并且我想在填充为2时找到排列,即长度为5:

0 1 2 3 4 (array indexes)
5 4 3 2 1 (maximum value of partition component that can be allocated to each index)
2 1 1 _ _ (the partition plus 2 empty indexes)

这表示为一个类似于so{2,1,1,0,0}的数组

当2在0索引(4!/2!2!)中时,有6个排列,2可以占用4个索引(2不能放在最后一个索引中),因此在这种情况下总共有24个排列(1可以占用任何索引)。

输入"21100"的输出:

211002110210011201011120011

02110、02101、02011、12100、12010、12001

00211、10210、11200、10201、01210、01201

10021、01021、00121、11020、1012001120

请注意,这只是"21100"的所有排列的集合减去其中2在第4个索引中的排列。这是一个相对简单的案例。


该问题可以描述为组合n个不同的排列组,因为上述情况可以表示为x=1 n=4的排列和x=2 n=5的排列的组合,其中x是值计数,n是"空间"计数。

我的困难在于制定一种可以通过计算获得所有可能性的方法,任何建议都将不胜感激-请原谅我的问题中术语混乱。


*该算法回答了以下问题:

有一组n单位被攻击k次。每个攻击有p的失误机会和q(1-p)的伤害机会集合中的一个随机单元。第二次损坏的单元被摧毁并且从集合中移除。

发生的可能性有多大攻击后,x未受损单位、y受损单位和z被毁单位?

如果有人知道解决这个问题的更直接的方法,请告诉我。

我将使用该算法生成多集的所有排列,如问题的答案所示

如何生成多集的所有排列?

然后过滤以符合我的标准。

最新更新