2012-03-04 3 views
2

Это легко перечислить все комбинации п вещей, принятых К одновременно с NCHOOSEK функции.в комбинации Перечисление Matlab

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

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

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

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

+2

Перестановки или комбинации? –

+0

Если я правильно вас понимаю, и я редко правильно разбираюсь в вопросах правильно, вы хотите создать функцию, которая превосходит встроенный NCHOOSEK, в частности, для случаев, когда n> 15. Я не пойду так далеко, чтобы сказать что невозможно написать функции Matlab, превосходящие внутренние функции Matlab, но, возможно, очень сложные. –

+0

Спасибо Оли, обновил вопрос. Я говорю о комбинациях. – alexey

ответ

0

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

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

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

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

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

Смежные вопросы