Перечисление комбинаций в Matlab - PullRequest
2 голосов
/ 04 марта 2012

Легко перечислить все комбинации n взятых вещей k одновременно с функцией NCHOOSEK .

Как построить однувзаимно-однозначное соответствие комбинации и ее индекса (от 1 до n! / (k! (nk)!) )?

Конечно, этовозможно использование NCHOOSEK , но это не практично, если n достаточно велико (как указано в документации более 15).

Как реализовать COMBINATION_TO_INDEX и INDEX_TO_COMBINATION функции, верно?

UPD: Найдена реализация индекса для комбинированной функции: ONECOMB .Все еще ищем функцию реверса (комбинация с индексом).

1 Ответ

0 голосов
/ 04 марта 2012

Если вы хотите знать о перестановках , как подсказывает ваш заголовок, функция perms создает все возможные перестановки вектора.

Если вы хотите комбинаций , вы можете, конечно, перебором, используя функцию perms a-like так:

x=zeros(n,1);
x(1:k)=1;

y=unique(perms(x),'rows');
combs=y*yourvector;

Это довольно неэффективно, так как вычисляет все перестановки, которые обычно на порядки превышают количество комбинаций.

...