2010-09-07 2 views
2

Моя голова застревает в поиске алгоритма для моей проблемы.Проблема с разделом Matlab

Предположит, у меня N Числа (позволяет сказать, 4), и я хочу иметь все X-разбиения (X = N/2)

Пример:

2-разбиения {1,2,3, 4}: (1,2) (1,3) (1,4) (2,3) (2,4) (3,4) [Просто: все комбинации]

У меня нет подскажите, как сгенерировать эти комбинации. Если у кого-то из вас есть идея в Разуме (мне все равно, на каком языке. Pseudocode ist вполне достаточно. Мне все равно, является ли он итеративным или явным).

С наилучшими пожеланиями, Bigbohne

ответ

0
foreach i in SET 
    foreach j in SET 
     if i < j, SAY "I have a partition ($i,$j)" 
    NEXT j 
NEXT i 

это зависит от функции перебора для вашего набора, и работает в N^2 раз.

Для Matlab ознакомьтесь с представленными функциями, , например.combnk

+0

fwiw, это, как вы говорите, "combinat Ионы ", PARTITION - это другое определение при обращении к множеству: раздел SET {1,2,3,4} - это отличный способ поместить элементы SET в разные контейнеры (подмножества). Итак, {{1,2}, {3}, {4}} - разбиение {1,2,3,4}. – maxwellb

+0

будет генерировать дубликаты – second

+0

Отлично ... НО !!!! что, если «X» становится больше 2? ... скажем ... у меня есть {1,2,3,4,5,6,7,8}, и я хочу иметь все 4-комбинации? например: {1,2,3,4}, {1,2,3,5} ... – Bigbohne

1

Вот код MatLab,

myNums = [2,3,6,5]; 
for i = 1:size(myNums,2) 
    combinationsSet{i} = nchoosek(myNums,i); 
end 
+0

цикл предназначен для изменения количества элементов, которые нужно выбрать, – blueskin