Как рассчитать индекс (лексикографический порядок) при заданной комбинации

Я знаю, что существует алгоритм, который позволяет по комбинации чисел (без повторений, без порядка) вычислять индекс лексикографического порядка.
Для моего приложения это было бы очень полезно для ускорения работы ...

Например:

combination(10, 5)  
1 - 1 2 3 4 5  
2 - 1 2 3 4 6  
3 - 1 2 3 4 7  
....  
251 - 5 7 8 9 10  
252 - 6 7 8 9 10  

Мне нужно, чтобы алгоритм возвращал индекс данной комбинации.
es: index (2, 5, 7, 8, 10) -> index

РЕДАКТИРОВАТЬ: на самом деле я использую приложение Java, которое генерирует все комбинации C (53, 5) и вставляет их в TreeMap. Моя идея состоит в том, чтобы создать массив, содержащий все комбинации (и связанные данные), которые я могу проиндексировать с помощью этого алгоритма.
Все для ускорения поиска комбинаций. Однако я попробовал некоторые (не все) ваши решения, и предложенные вами алгоритмы медленнее, чем get () из TreeMap.
Если это поможет: мне нужна комбинация 5 от 53, начиная с 0 до 52.

Еще раз спасибо всем: -)

12
задан StefanoS 17 March 2011 в 02:05
поделиться