我有一个向量,其中包含一个较大的 n 数字组中的两个数字的每个可能组合的值(从0到( n -1)) ,不包括两个数字相同的组合。 例如,如果 n = 4,则组合将显示在 number1 和 number2 列中。
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 的组合。
在这种情况下是否有任何表达式来计算索引?
答案 0 :(得分:2)
首先,请注意所有对都可以分组为大小的块(n-1),其中n是不同索引的数量。这意味着给定一对(i,j),包含它的块的索引将是i(n-1)。在该块内,索引按顺序排列,跳过索引i。如果j <我,然后我们只是看看块的开始j步。否则,我们会看过去的j-1步。总的来说,这给出了公式
int index = i * (n - 1) + (j < i? j : j - 1);
答案 1 :(得分:0)
请注意,唯一的区别是当number2
大于number1
时,如果发生这种情况,会跳过number2
序列中的值,因此您需要减少计数,例如这样:
index = number1 * (n - 1) + number2 - (number2 > number1 ? 1 : 0)