我偶然发现了一个我正在寻找智能解决方案的问题。这基本上是一个组合问题。Devise Combinatorics命名约定
我有五个对象,其中我需要选择两个,我可以选择同一个两次,并且无论选择它们的顺序如何。这给我(5 + 2 - 1选择2)= 15个可能的组合。我现在想要将每个组合(即(1,1)或(2,5))减少到1到15之间的数字。有什么建议吗?
我偶然发现了一个我正在寻找智能解决方案的问题。这基本上是一个组合问题。Devise Combinatorics命名约定
我有五个对象,其中我需要选择两个,我可以选择同一个两次,并且无论选择它们的顺序如何。这给我(5 + 2 - 1选择2)= 15个可能的组合。我现在想要将每个组合(即(1,1)或(2,5))减少到1到15之间的数字。有什么建议吗?
准字典排序。按照字典顺序分配每个选择的位置,第二个分量不小于第一个。
(i,j) -> (15 - (7-i)*(6-i)/2) + (j - i) + 1
假设你有一个组合(I,J)
不失一般性,说我< = j的
((7-i)+5)*(i-1)/2 + (j-i+1)
你必须
(1,1) (1,2)→2(2,2)→6(3,3)→10(4,4)→13(5,5)→15
3)→7(3,4)→11(4,5)→14
(1,3) - > 3(2,4) - >图8(3,5) - > 12
(1,4) - > 4(2,5) - > 9
(1,5) - > 5
基本上,你首先必须列前组合数我,再加上(J-11 + 1)的行数
谢谢!认为那里可能有一个名字。 – foges 2012-07-12 00:54:37