我有一个向量,它包含一个较大的n个数组(从0到(n-1))的两个数字的每个可能组合的值,不包括两个数字相同的组合.
例如,如果n = 4,则组合将是第1列和第2列中显示的组合.
number1 number2 vector-index value
0 1 0 3
0 2 1 98
0 3 2 0
1 0 3 44
1 2 4 6
1 3 5 3
2 0 6 2
2 1 7 43
2 3 8 23
3 0 9 11
3 1 10 54
3 2 11 7
总是有n *(n-1)个组合,因此它是向量中的元素数量(上例中的12个元素).
问题
为了访问向量中的值,我需要一个表达式,允许我找出每个组合的相应索引号.
如果包含number1 = number2的组合,则索引号可以通过以下方式计算:
index = number1*(n-1)+number2
This question是相关的,但也包括number1 = number2的组合.
在这种情况下是否有任何表达式来计算索引?
最佳答案 首先,请注意所有对都可以分组为大小的块(n-1),其中n是不同索引的数量.这意味着给定一对(i,j),包含它的块的索引将是i(n-1).在该块内,索引按顺序排列,跳过索引i.如果j
int index = i * (n - 1) + (j < i? j : j - 1);