algorithm – 计算数字组合的索引

我有一个向量,它包含一个较大的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);
点赞