Если то, что вы пытаетесь сделать, похоже на индексирование элемента A [i] [j] в верхней треугольной матрице, где N - количество строк, вы можете рассчитать индекс следующим образом:
A[ N*j - j*(j-1)/2 + i ]
например, если N=4
и i=1
, j=2
, то индекс в матрице равен
4*2 - 2*1/2 + 1 = 8-1+1 = 8
0 1 2 3
0: 0 4 7 9
1: 1 5 8
2: 2 6
3: 3
Тогда не должно быть слишком сложно адаптировать (I, J) к вашему (A, B). Тогда, если вы позволите A быть линейным массивом битов, это должно быть довольно компактно.
С другой стороны, если когда-либо установлен только один элемент массива, вы можете просто сохранить пару (A, B) и покончить с этим, потому что в первом случае вам нужно запомнить N (N + 1). ) / 2 бита, тогда как в последнем случае вам нужно запомнить только 2 * log (N) бита (основание 2).