繁体   English   中英

组合算法

[英]algorithm to combinatorics

我正在尝试解决组合问题,这似乎很简单,但是我遇到了一些麻烦。

如果我最多有X张桌子,并且N人坐在桌子上,则每个桌子可以有1到N个座位,并且我只能将人坐在矩形桌子的一侧(因此,人们的坐姿很重要)。

我想编写一个可以计算从1到K表的所有座位位置分布的代码。

例如,如果我有12个人和1个桌子,我有479001600的座位方式(这很容易计算,我使用的阶乘为12)。

但是,如果我有12个人和3张桌子,我有4390848000的座位方式。 我尝试了不同的解决方案,但找不到正确的解决方案。

我试图将12除以3,然后o使用因数的结果(它没有用),我试图使用12! * 3(它也不起作用)。

有人可以给我提示我可以使用的算法吗?

阅读有关Lah Numbers的文章,它应该会有所帮助。

我认为4,390,848,000(如果算上空座位)不是正确的答案。

将N个人安排到X个N座位表中的方法的数量等于将N个人安排到1个(N * X)座位表中。 结果非常明显:(NX选择N×N!)。

  • NX选择N =在不考虑排列的情况下将N个人放入NX席位的方法数量。
  • N! =这N个人的排列数量。

例如

[a b|_ _]  [a _|b _]  [a _|_ b] 
[_ a|b _]  [_ a|_ b]  [b a|_ _]
[_ _|a b]  [b _|a _]  [_ b|a _]  = 4 choose 2 * 2! = 12.
[b _|_ a]  [_ b|_ a]  [_ _|b a]

但是(36选择12×12!)= 599,555,620,984,320,000。

即使表是相同的(删除3!= 6),结果99,925,936,830,720,000仍然比4,390,848,000大得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM