Этот класс может быть легко применен к вашей проблеме. Если у вас есть ранг (или индекс) для таблицы биномиальных коэффициентов, просто вызовите метод класса, который возвращает K-индексы в массиве. Затем выполните цикл по возвращенному массиву, чтобы увидеть, совпадает ли какое-либо из значений K-индекса с имеющимся у вас значением. Довольно прямо вперед ...
ЛЕНИЕ: Комбинаторика и unranking были в конечном счете тем, в чем я нуждался. Ссылки ниже очень помогли:
http://msdn.microsoft.com/en-us/library/aa289166(v=vs.71).aspx
http://www.codeproject.com/Articles/21335/Combinations-in-C-Part-2
Проблема
При заданном списке из N символов произнесите {0,1,2,3,4 ...}
И NCr комбинации этих
например. NC3 сгенерирует:
0 1 2
0 1 3
0 1 4
...
...
1 2 3
1 2 4
etc...
Для i-й комбинации (i = [1 .. NCr]) я хочу определить, является ли символ (ы) его частью.
Func (N, r, i, s) = True / False или 0/1
например. Продолжение сверху Первая комбинация содержит 0 1 2, но не 3
F(N,3,1,"0") = TRUE
F(N,3,1,"1") = TRUE
F(N,3,1,"2") = TRUE
F(N,3,1,"3") = FALSE
Текущие подходы и советы, которые могут помочь или быть связаны.
Отношение к матрицам Для r = 2 например. 4C2 комбинации являются верхней (или нижней) половиной 2D матрицы
1,2 1,3 1,4
----2,3 2,4
--------3,4
Для r = 3 - это угол трехмерной матрицы или куба, для r = 4 - это «угол» для 4D-матрицы и так далее.
Другое отношение
В идеале решение должно иметь форму, похожую на ответ на это:Рассчитать комбинацию на основе позиции
N-ая комбинация в списке комбинаций длины r (с разрешенной повторностью), i-й символ может быть вычислен
Используя целочисленное деление и остаток:
n / r ^ i% r = (0 для 0-го символа, 1 для 1-го символа .... и т. д.)
например, для 6-й гребенки из 3 символов 0-й 1-й и 2-й символы:
i = 0 => 6 / 3^0 % 3 = 0
i = 1 => 6 / 3^1 % 3 = 2
i = 2 => 6 / 3^2 % 3 = 0
6-й гребень будет тогда 0 2 0
Мне нужно что-то подобное, но с повторением не допускается.
Спасибо, что ответили на этот вопрос так далеко:]
Кевин.