У меня есть несколько наборов, скажем, S1, S2, S3, ... Каждый набор имеет разные элементы.Скажем, S1 = {A, B, C}, S2 = {X, Y}, S3 = {P, Q, R, T}
Существует комбинация этих наборов K = {S1, S2,S3}.Например, экземпляром этой комбинации будет {A, X, P}.Очевидно, что возможны комбинации 3 x 2 x 4 = 24.Что мне нужно, так это «ранг» конкретной комбинации, рассчитанный с использованием простого упорядоченного перечисления слева направо и наоборот.
Очевидно, я могу легко вычислить это, просто перечислив все комбинации и сравнив ихна запрошенную комбинацию при сохранении счетчика, но мне нужен эффективный алгоритм, поскольку мои наборы могут содержать до 20000 элементов каждый, а количество комбинированных наборов для некоторого случая> 10.
Кстати, я знаюпоток Вычислить ранг комбинации? здесь в переполнении стека.Но, к сожалению, здесь это неприменимо, поскольку мои комбинации состоят из наборов разных размеров для разных позиций
Я был бы признателен за реализацию в C #, но другие языки или псевдокод также были бы очень полезны.
Любые предложения, пожалуйста
kemal
ОБНОВЛЕНИЕ: @spinning_plane & @aasmund.Спасибо за ответы.Они оба дают мне одну и ту же формулу для расчета ранга.
Но мне также нужен другой путь.т.е. получить комбинацию для данного ранга (на основе нуля).Например, если присвоить ранг 0, результатом будет {A, X, P}, для 3 {A, X, R} и т. Д. Кто-нибудь с алгоритмом, пожалуйста?