最合适的组合算法

时间:2015-03-05 13:22:59

标签: java algorithm combinations combinatorics

有6个座位和4个人,必须根据一些最优标准分配座位。例如:

Allocation 1:
_ _ _ _ _ _
1 2   3 4 

Allocation 2:
_ _ _ _ _ _
1 3   2   4 

...

问题1:它是哪个组合学问题?

问题2:搜索所有可能组合的最合适算法的名称是什么?

2 个答案:

答案 0 :(得分:3)

1。)没有重复的n的k-置换: http://www.statlect.com/comdis1.htm

2.)这取决于您要搜索的内容。例如,我为您提供遗传算法,如果您可以订购“良好程度”,可以根据特殊的启发式找到最佳候选者。可能的解决方案。

答案 1 :(得分:1)

要回答问题1,请注意,对于4人的序列,有4!个可能性。此外,6-4=2非占用席位必须位于人员之间,其中有4+1=5个插槽(在每个人之前和最后一个人之后),从而产生5+2-1 choose 2种可能性,其中choose表示二项式系数,通过解释为stars and bars问题。总的来说,有

4!(6 choose 2)

可能性,或参数化

m!(m+1+n-m-1 choose n-m) = m!(n choose n-m)

其中m是人数,n是座位数;使用身份

n choose k = n!/(k!(n-k)!)

这可以简化为

n!/(n-m)!

确实是n - 定义herem个对象的排列。

关于问题2,这实际上取决于最优性标准以及是否需要精确,近似或启发式算法。