0

我偶然发现了一个我正在寻找智能解决方案的问题。这基本上是一个组合问题。

我有五个对象,我需要从中选择两个,我可以选择同一个对象两次,我选择它们的顺序无关紧要。这给了我(5 + 2 - 1 选择 2)= 15 种可能的组合。我现在想将每个组合(即 (1,1) 或 (2, 5))减少到 1 到 15 之间的数字。有什么建议吗?

4

2 回答 2

3

准字典顺序。为每个选择分配其在字典顺序中的位置,第二个组件不小于第一个组件。

(i,j) -> (15 - (7-i)*(6-i)/2) + (j - i) + 1
于 2012-07-11T23:40:11.500 回答
1

假设你有一个组合 (i, j)

不失一般性,说 i <= j

((7-i)+5)*(i-1)/2 + (j-i+1)

你会有

(1, 1)->1 (2, 2)->6 (3, 3)->10 (4, 4)->13 (5, 5)->15

(1, 2)->2 (2, 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

基本上,您将首先在第 i 列之前获得组合数,然后加上 (j-i+1) 作为行号

于 2012-07-11T23:51:16.870 回答