Я хочу предварительно вычислить некоторые значения для каждой комбинации в наборе комбинаций. Например, выбирая 3 числа от 0 до 12, я вычислим некоторое значение для каждого из них:
>>> for n in choose(range(13), 3):
print n, foo(n)
(0, 1, 2) 78
(0, 1, 3) 4
(0, 1, 4) 64
(0, 1, 5) 33
(0, 1, 6) 20
(0, 1, 7) 64
(0, 1, 8) 13
(0, 1, 9) 24
(0, 1, 10) 85
(0, 1, 11) 13
etc...
Я хочу сохранить эти значения в массиве, поэтому, учитывая комбинацию, я могу вычислить ее и получить значение. Например:
>>> a = [78, 4, 64, 33]
>>> a[magic((0,1,2))]
78
Что будет magic
быть?
Первоначально я думал просто сохранить его как 3-мерную матрицу размером 13 x 13 x 13, поэтому я могу легко индексировать ее таким образом. Хотя это нормально для 13 выбрать 3, у этого было бы слишком много накладных расходов для чего-то вроде 13 выбрать 7.
Я не хочу использовать dict, потому что, в конце концов, этот код будет в C, и массив будет намного эффективнее.
ОБНОВЛЕНИЕ: У меня также есть аналогичная проблема, но с использованием комбинаций с повторениями, поэтому любые ответы о том, как получить ранг из них, будут высоко оценены =).
ОБНОВЛЕНИЕ: Чтобы было ясно, я пытаюсь сэкономить место. Каждая из этих комбинаций фактически индексирует во что-то занимающее много места, пусть скажем 2 килобайта. Если бы я использовал массив 13x13x13, то это было бы 4 мегабайта, из которых мне нужно всего 572 килобайта, используя (13 выбирайте 3) пятна.